Avatar billede hoejgaard Juniormester
07. maj 2007 - 02:20 Der er 58 kommentarer og
1 løsning

sammenkæde select bokse

Hej
Jeg har 3 select bokse i en form der skal kædes sammen, på den måde, så når man vælger en option i den første gives en række options i den anden select boks, og når man vælger en af disse options, gives en række options i den 3. select boks..
Hvordan får jeg det lavet ??
Avatar billede gurly Praktikant
07. maj 2007 - 06:56 #1
der er en forklaring her, godt nok kun til 2 bokse, men måske at det kan hjælpe dig på vej
http://www.hjemmesideskolen.dk/html/multilevelmenu.asp
Avatar billede mclemens Nybegynder
07. maj 2007 - 08:46 #2
Kig evt. på Roenvings multiselect
http://roenving.users.whitehat.dk/
Avatar billede mclemens Nybegynder
07. maj 2007 - 08:46 #3
Avatar billede hoejgaard Juniormester
07. maj 2007 - 13:47 #4
Hvor kan man se koden til roenving's mulktiselect..??
kan ikke finde den på siden eller i vis kilde......
Avatar billede mclemens Nybegynder
07. maj 2007 - 14:08 #5
Umiddelbart, så hvis kilde og udrykning af koden:









<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html><head><meta http-equiv="content-type" content="text/html; charset=iso-8859-1"><title>Ingen titel</title>

<script language="javascript" type="text/javascript">
var arr = [
    ["Valg 1",[
        ["2. valg 1 (1)",
            ["3. valg 1 (1-1)","3. valg 2 (1-1)","3. valg 3 (1-1)","3. valg 4 (1-1)"]],
        ["2. valg 2 (1)",
            ["3. valg 1 (1-2)","3. valg 2 (1-2)","3. valg 3 (1-2)"]],
        ["2. valg 3 (1)",
            ["3. valg 1 (1-3)","3. valg 2 (1-3)","3. valg 3 (1-3)","3. valg 4 (1-3)"]]]],
    ["Valg 2",[
        ["2. valg 1 (2)",
            ["3. valg 1 (2-1)","3. valg 2 (2-1)","3. valg 3 (2-1)","3. valg 4 (2-1)"]],
        ["2. valg 2 (2)",
            ["3. valg 1 (2-2)","3. valg 2 (2-2)"]],
        ["2. valg 3 (2)",
            ["3. valg 1 (2-3)","3. valg 2 (2-3)","3. valg 3 (2-3)","3. valg 4 (2-3)","3. valg 5 (2-3)","3. valg 6 (2-3)","3. valg 7 (2-3)","3. valg 8 (2-3)","3. valg 9 (2-3)","3. valg 10 (2-3)","3. valg 11 (2-3)","3. valg 12 (2-3)","3. valg 13 (2-3)","3. valg 14 (2-3)","3. valg 15 (2-3)","3. valg 16 (2-3)","3. valg 17 (2-3)","3. valg 18 (2-3)","3. valg 19 (2-3)","3. valg 20 (2-3)","3. valg 21 (2-3)"]],
        ["2. valg 4 (2)",
            ["3. valg 1 (2-4)","3. valg 2 (2-4)","3. valg 3 (2-4)","3. valg 4 (2-4)"]]]],
    ["Valg 3",[
        ["2. valg 1 (3)",
            ["3. valg 1 (3-1)","3. valg 2 (3-1)","3. valg 3 (3-1)"]],
        ["2. valg 2 (3)",
            ["3. valg 1 (3-2)","3. valg 2 (3-2)","3. valg 3 (3-2)"]],
        ["2. valg 3 (3)",
            ["3. valg 1 (3-3)","3. valg 2 (3-3)","3. valg 3 (3-3)"]],
        ["2. valg 4 (3)",
            ["3. valg 1 (3-4)","3. valg 2 (3-4)","3. valg 3 (3-4)"]],
        ["2. valg 5 (3)",
            ["3. valg 1 (3-5)","3. valg 2 (3-5)","3. valg 3 (3-5)"]]]]
];
//alert(arr1[1][1])
function initSels(){
    createOpts(document.getElementById('sel3'));
}

function createOpts(sel){
    var s = new Array();
    var num = 0, txt = "arr";
    var ar = opt = null;
    var n = sel.selectedIndex;
    var args = createOpts.arguments.length;
    for(var i=1;args>i;i++){
        s[i-1] = document.getElementById(createOpts.arguments[i]);
        if(s[i-1]==sel)num=i;
    }
    if(args>1){
        if(s[num])sel = s[num];
        else return;
    }
    if(n==0&&args>1){
        for(i=num;args>i+1;i++){
            s[i].length = 0;
            opt = document.createElement('OPTION');
            s[i].appendChild(opt);
            opt.value = "";
            opt.text = "\74-- Vælg --";
        }
        return true
    };
    for(i=0;num>i;i++){
        txt+="["+(s[i].selectedIndex-1)+"][1]";
    }
    ar = eval(txt);
    sel.length = 0;
    opt = document.createElement('OPTION');
    sel.appendChild(opt);
  opt.value = "";
  opt.text = "-- Vælg --";
    for(i=0;ar.length>i;i++){
        opt = document.createElement('OPTION');
        sel.appendChild(opt);
        if(typeof ar[i] == 'object'){
          opt.value = ar[i][0];
          opt.text = ar[i][0];
        }else{
          opt.value = ar[i];
          opt.text = ar[i];
      }
    }
    if(args>num+2){
        for(i=num+1;args-1>i;i++){
            s[i].length = 0;
            opt = document.createElement('OPTION');
            s[i].appendChild(opt);
            opt.value = "";
            opt.text = "\74-- Vælg --";
        }
    }
}









</script>

</head><body onload="initSels();">
<form name="sels">
<select name="sel3" id="sel3" onchange="createOpts(this,'sel3','sel4','sel5');">
<option value="" selected>Vis alle</option>
</select>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
<select name="sel4" id="sel4" onchange="createOpts(this,'sel3','sel4','sel5');">
<option value="" selected>&lt;-- Vælg --</option>
</select>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
<select name="sel5" id="sel5">
<option value="" selected
>&lt;-- Vælg --</option>
</select>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br><br>
</form>
</body></html>
Avatar billede roenving Novice
07. maj 2007 - 14:15 #6
Vis kilde via højreklik !-)
Avatar billede hoejgaard Juniormester
07. maj 2007 - 18:04 #7
Det ser fint ud !
Jeg vil gerne have noget ala det herunder, hvor den valgte option ses, hvis man kommer tilbage til formen ved validering. Men den skriver bare "- Vælg-" :

<tr>
  <td class="td32" width="15%">Erhverv:<br><br></td>
  <td WIDTH="75%"><select name="sel3" id="sel3" onchange="createOpts 
    (this,'sel3','sel4','sel5');" value="<?php echo "$row[sel3]"; ?>">
    <option value="<?php echo $row[sel3]; ?>"><?php echo $row[sel3]; ?></option>
    <option value="" selected>Vis alle</option>
                  </select><br><br>
  </td>
</tr>
Avatar billede roenving Novice
07. maj 2007 - 18:50 #8
-- så skal du lade være med at udskrive onload-tingen, hvis der er valgt i alle 3 !-)
Avatar billede hoejgaard Juniormester
07. maj 2007 - 19:07 #9
Okay.. hvor er det jeg udskriver onload-tingen ?
Avatar billede hoejgaard Juniormester
07. maj 2007 - 22:40 #10
har stadig ikke lige fundet ud af hvor jeg skal slette henne...
Avatar billede roenving Novice
07. maj 2007 - 22:44 #11
I ovenstående kode står den på body-tagget !-)
Avatar billede hoejgaard Juniormester
08. maj 2007 - 04:13 #12
ja  men så er det ikke muligt at lave valgene om hvis man ønsker nogle andre værdier..
Avatar billede hoejgaard Juniormester
08. maj 2007 - 04:15 #13
eller rettere, så viser den slet ingen valgmuligheder...
Avatar billede hoejgaard Juniormester
08. maj 2007 - 04:18 #14
Det skal helst være sådan, at man kan foretage nogle andre valg under valideringsprocessen..
Avatar billede roenving Novice
08. maj 2007 - 11:13 #15
Hrm, det er zq lidt af en opgave, for der kommer problemer med flere funktioner, der kører samtidigt ...

-- men jeg har ikke opgivet endnu !-)
Avatar billede mclemens Nybegynder
08. maj 2007 - 12:06 #16
Måske misforstår jeg, men
kan man ikke lave sådan her ?
(indrømmer det er et grimt "hack")




<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html><head><meta http-equiv="content-type" content="text/html; charset=iso-8859-1"><title>Ingen titel</title>

<script language="javascript" type="text/javascript">
var arr = [
    ["Valg 1",[
        ["2. valg 1 (1)",
            ["3. valg 1 (1-1)","3. valg 2 (1-1)","3. valg 3 (1-1)","3. valg 4 (1-1)"]],
        ["2. valg 2 (1)",
            ["3. valg 1 (1-2)","3. valg 2 (1-2)","3. valg 3 (1-2)"]],
        ["2. valg 3 (1)",
            ["3. valg 1 (1-3)","3. valg 2 (1-3)","3. valg 3 (1-3)","3. valg 4 (1-3)"]]]],
    ["Valg 2",[
        ["2. valg 1 (2)",
            ["3. valg 1 (2-1)","3. valg 2 (2-1)","3. valg 3 (2-1)","3. valg 4 (2-1)"]],
        ["2. valg 2 (2)",
            ["3. valg 1 (2-2)","3. valg 2 (2-2)"]],
        ["2. valg 3 (2)",
            ["3. valg 1 (2-3)","3. valg 2 (2-3)","3. valg 3 (2-3)","3. valg 4 (2-3)","3. valg 5 (2-3)","3. valg 6 (2-3)","3.

valg 7 (2-3)","3. valg 8 (2-3)","3. valg 9 (2-3)","3. valg 10 (2-3)","3. valg 11 (2-3)","3. valg 12 (2-3)","3. valg 13

(2-3)","3. valg 14 (2-3)","3. valg 15 (2-3)","3. valg 16 (2-3)","3. valg 17 (2-3)","3. valg 18 (2-3)","3. valg 19 (2-3)","3.

valg 20 (2-3)","3. valg 21 (2-3)"]],
        ["2. valg 4 (2)",
            ["3. valg 1 (2-4)","3. valg 2 (2-4)","3. valg 3 (2-4)","3. valg 4 (2-4)"]]]],
    ["Valg 3",[
        ["2. valg 1 (3)",
            ["3. valg 1 (3-1)","3. valg 2 (3-1)","3. valg 3 (3-1)"]],
        ["2. valg 2 (3)",
            ["3. valg 1 (3-2)","3. valg 2 (3-2)","3. valg 3 (3-2)"]],
        ["2. valg 3 (3)",
            ["3. valg 1 (3-3)","3. valg 2 (3-3)","3. valg 3 (3-3)"]],
        ["2. valg 4 (3)",
            ["3. valg 1 (3-4)","3. valg 2 (3-4)","3. valg 3 (3-4)"]],
        ["2. valg 5 (3)",
            ["3. valg 1 (3-5)","3. valg 2 (3-5)","3. valg 3 (3-5)"]]]]
];
//alert(arr1[1][1])




function initSels(){
    createOpts(document.getElementById('sel3'));

  if(a=document.getElementById("presel")){
    a=eval(a.firstChild.nodeValue);
    for(i=0;i<a.length;i++){
      elm=document.getElementById("sel"+(i+3));
      elmc=elm.childNodes;
      for(j=0,tmp=-1;j<elmc.length;j++){
        if(elmc[j].value==a[i])tmp=j;
      }
      if(tmp!=-1){
        elm.selectedIndex=tmp-1;
        createOpts(elm,'sel3','sel4','sel5');
      }
    }
  }

}




function createOpts(sel){
    var s = new Array();
    var num = 0, txt = "arr";
    var ar = opt = null;
    var n = sel.selectedIndex;
    var args = createOpts.arguments.length;
    for(var i=1;args>i;i++){
        s[i-1] = document.getElementById(createOpts.arguments[i]);
        if(s[i-1]==sel)num=i;
    }
    if(args>1){
        if(s[num])sel = s[num];
        else return;
    }
    if(n==0&&args>1){
        for(i=num;args>i+1;i++){
            s[i].length = 0;
            opt = document.createElement('OPTION');
            s[i].appendChild(opt);
            opt.value = "";
            opt.text = "\74-- Vælg --";
        }
        return true
    };
    for(i=0;num>i;i++){
        txt+="["+(s[i].selectedIndex-1)+"][1]";
    }
    ar = eval(txt);
    sel.length = 0;
    opt = document.createElement('OPTION');
    sel.appendChild(opt);
  opt.value = "";
  opt.text = "-- Vælg --";
    for(i=0;ar.length>i;i++){
        opt = document.createElement('OPTION');
        sel.appendChild(opt);
        if(typeof ar[i] == 'object'){
          opt.value = ar[i][0];
          opt.text = ar[i][0];
        }else{
          opt.value = ar[i];
          opt.text = ar[i];
      }
    }
    if(args>num+2){
        for(i=num+1;args-1>i;i++){
            s[i].length = 0;
            opt = document.createElement('OPTION');
            s[i].appendChild(opt);
            opt.value = "";
            opt.text = "\74-- Vælg --";
        }
    }
}









</script>

</head><body onload="initSels();">



<div id="presel" style="display:none;">["Valg 3","2. valg 1 (3)"]</div>




<form name="sels">
<select name="sel3" id="sel3" onchange="createOpts(this,'sel3','sel4','sel5');">
<option value="" selected>Vis alle</option>
</select>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
<select name="sel4" id="sel4" onchange="createOpts(this,'sel3','sel4','sel5');">
<option value="" selected>&lt;-- Vælg --</option>
</select>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
<select name="sel5" id="sel5">
<option value="" selected
>&lt;-- Vælg --</option>
</select>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br><br>
</form>
</body></html>
Avatar billede mclemens Nybegynder
08. maj 2007 - 12:07 #17
<div id="presel" style="display:none;">["Valg 3","2. valg 1 (3)"]</div>
^ - Skal selvfølgelig indeholde de serverside outputtede
tidligere valgte variabel values, hvis de eksisterer.
Avatar billede mclemens Nybegynder
08. maj 2007 - 12:11 #18
Ret lige denne funktion i ovenstående
- det gik lidt fokert med childnodes...



function initSels(){
    createOpts(document.getElementById('sel3'));

  if(a=document.getElementById("presel")){
    a=eval(a.firstChild.nodeValue);
    for(i=0;i<a.length;i++){
      elm=document.getElementById("sel"+(i+3));
      elmc=elm.getElementsByTagName("option");
      for(j=0,tmp=-1;j<elmc.length;j++){
        if(elmc[j].value==a[i])tmp=j;
      }
      if(tmp!=-1){
        elm.selectedIndex=tmp;
        createOpts(elm,'sel3','sel4','sel5');
      }
    }
  }

}
Avatar billede mclemens Nybegynder
08. maj 2007 - 12:22 #19
function initSels(){
  createOpts(document.getElementById('sel3'));
  if(a=document.getElementById("presel")){
    a=eval(a.firstChild.nodeValue);
    for(i=0;i<a.length;i++){
      elm=document.getElementById("sel"+(i+3));
      elmc=elm.getElementsByTagName("option");
      for(j=0;j<elmc.length;j++){
        if(elmc[j].value==a[i]){
          elm.selectedIndex=j;
          createOpts(elm,'sel3','sel4','sel5');
        }
      }
    }
  }
}

- Det if tmp var et overflødighedshorn.
(holder lige lidt igen med at spamme)
Avatar billede hoejgaard Juniormester
08. maj 2007 - 13:46 #20
kigger på det mclemens..
Avatar billede mclemens Nybegynder
08. maj 2007 - 16:19 #21
Ok, hvis du har problemet med 08/05-2007 12:06:08
- så var der lige et par linjer der blev ombrudt.


<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html><head><meta http-equiv="content-type" content="text/html; charset=iso-8859-1"><title>Ingen titel</title>

<script language="javascript" type="text/javascript">
var arr = [
    ["Valg 1",[
        ["2. valg 1 (1)",
            ["3. valg 1 (1-1)","3. valg 2 (1-1)","3. valg 3 (1-1)","3. valg 4 (1-1)"]],
        ["2. valg 2 (1)",
            ["3. valg 1 (1-2)","3. valg 2 (1-2)","3. valg 3 (1-2)"]],
        ["2. valg 3 (1)",
            ["3. valg 1 (1-3)","3. valg 2 (1-3)","3. valg 3 (1-3)","3. valg 4 (1-3)"]]]],
    ["Valg 2",[
        ["2. valg 1 (2)",
            ["3. valg 1 (2-1)","3. valg 2 (2-1)","3. valg 3 (2-1)","3. valg 4 (2-1)"]],
        ["2. valg 2 (2)",
            ["3. valg 1 (2-2)","3. valg 2 (2-2)"]],
        ["2. valg 3 (2)",
            ["3. valg 1 (2-3)","3. valg 2 (2-3)","3. valg 3 (2-3)","3. valg 4 (2-3)","3. valg 5 (2-3)","3. valg 6 (2-3)","3. valg 7 (2-3)","3. valg 8 (2-3)","3. valg 9 (2-3)","3. valg 10 (2-3)","3. valg 11 (2-3)","3. valg 12 (2-3)","3. valg 13 (2-3)","3. valg 14 (2-3)","3. valg 15 (2-3)","3. valg 16 (2-3)","3. valg 17 (2-3)","3. valg 18 (2-3)","3. valg 19 (2-3)","3. valg 20 (2-3)","3. valg 21 (2-3)"]],
        ["2. valg 4 (2)",
            ["3. valg 1 (2-4)","3. valg 2 (2-4)","3. valg 3 (2-4)","3. valg 4 (2-4)"]]]],
    ["Valg 3",[
        ["2. valg 1 (3)",
            ["3. valg 1 (3-1)","3. valg 2 (3-1)","3. valg 3 (3-1)"]],
        ["2. valg 2 (3)",
            ["3. valg 1 (3-2)","3. valg 2 (3-2)","3. valg 3 (3-2)"]],
        ["2. valg 3 (3)",
            ["3. valg 1 (3-3)","3. valg 2 (3-3)","3. valg 3 (3-3)"]],
        ["2. valg 4 (3)",
            ["3. valg 1 (3-4)","3. valg 2 (3-4)","3. valg 3 (3-4)"]],
        ["2. valg 5 (3)",
            ["3. valg 1 (3-5)","3. valg 2 (3-5)","3. valg 3 (3-5)"]]]]
];
//alert(arr1[1][1])




function initSels(){
  createOpts(document.getElementById('sel3'));
  if(a=document.getElementById("presel")){
    a=eval(a.firstChild.nodeValue);
    for(i=0;i<a.length;i++){
      elm=document.getElementById("sel"+(i+3));
      elmc=elm.getElementsByTagName("option");
      for(j=0;j<elmc.length;j++){
        if(elmc[j].value==a[i]){
          elm.selectedIndex=j;
          createOpts(elm,'sel3','sel4','sel5');
        }
      }
    }
  }
}




function createOpts(sel){
    var s = new Array();
    var num = 0, txt = "arr";
    var ar = opt = null;
    var n = sel.selectedIndex;
    var args = createOpts.arguments.length;
    for(var i=1;args>i;i++){
        s[i-1] = document.getElementById(createOpts.arguments[i]);
        if(s[i-1]==sel)num=i;
    }
    if(args>1){
        if(s[num])sel = s[num];
        else return;
    }
    if(n==0&&args>1){
        for(i=num;args>i+1;i++){
            s[i].length = 0;
            opt = document.createElement('OPTION');
            s[i].appendChild(opt);
            opt.value = "";
            opt.text = "\74-- Vælg --";
        }
        return true
    };
    for(i=0;num>i;i++){
        txt+="["+(s[i].selectedIndex-1)+"][1]";
    }
    ar = eval(txt);
    sel.length = 0;
    opt = document.createElement('OPTION');
    sel.appendChild(opt);
  opt.value = "";
  opt.text = "-- Vælg --";
    for(i=0;ar.length>i;i++){
        opt = document.createElement('OPTION');
        sel.appendChild(opt);
        if(typeof ar[i] == 'object'){
          opt.value = ar[i][0];
          opt.text = ar[i][0];
        }else{
          opt.value = ar[i];
          opt.text = ar[i];
      }
    }
    if(args>num+2){
        for(i=num+1;args-1>i;i++){
            s[i].length = 0;
            opt = document.createElement('OPTION');
            s[i].appendChild(opt);
            opt.value = "";
            opt.text = "\74-- Vælg --";
        }
    }
}









</script>

</head><body onload="initSels();">



<div id="presel" style="display:none;">["Valg 3","2. valg 1 (3)"]</div>




<form name="sels">
<select name="sel3" id="sel3" onchange="createOpts(this,'sel3','sel4','sel5');">
<option value="" selected>Vis alle</option>
</select>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
<select name="sel4" id="sel4" onchange="createOpts(this,'sel3','sel4','sel5');">
<option value="" selected>&lt;-- Vælg --</option>
</select>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
<select name="sel5" id="sel5">
<option value="" selected
>&lt;-- Vælg --</option>
</select>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br><br>
</form>
</body></html>




Og hvis du f.eks. bruger andre navne end sel3,4
og 5 skal ovenstående initSels() rettes til:



selcs=["sel3","sel4","sel5"];

function initSels(){
  createOpts(document.getElementById('sel3'));
  if(a=document.getElementById("presel")){
    a=eval(a.firstChild.nodeValue);
    for(i=0;i<a.length;i++){
      elm=document.getElementById(selcs[i]);
      elmc=elm.getElementsByTagName("option");
      for(j=0;j<elmc.length;j++){
        if(elmc[j].value==a[i]){
          elm.selectedIndex=j;
          createOpts(elm,'sel3','sel4','sel5');
        }
      }
    }
  }
}


(selvfølgelig stadig med <div id="presel" style="display:none;">["Valg 3","2. valg 1 (3)"]</div> )
Avatar billede hoejgaard Juniormester
08. maj 2007 - 22:46 #22
mclemens
Jeg er lidt i tvivl om hvad det script gør som du har lavet der. Kan ikke få det til at gøre det som jeg gerne vil..
Det jeg har, er 3 trin i en brugeropettelse, hvor man for at komme fra trin 1 til trin2 trykker "gem", og det samme fra trin 2 til 3.
Når der er trykket "gem" smides data i en databasetabel.
Brugeren har så mulighed for at gå frem og tilbage mellem trinene under oprettelsen,
og de indtastede data bliver så genindlæst fra databasen.
Det skal så også gøres ved disse 3 felter vi snakker om, men kan ikke få det til at virke med det du har skrevet..

Jeg har prøvet med dette uden held :
<tr>
  <td class="td32" width="15%">Test:<br><br></td>
  <td WIDTH="75%"><select name="sel3" id="sel3" onchange="createOpts  (this,'sel3','sel4','sel5'); value="<?php echo $row[sel3]; ?>">
  <option value="<?php echo $row[sel3]; ?>"><?php echo $row[sel3]; ?></option>
  <option value="" selected>Vis alle</option>
                  </select><br><br>
  </td>
</tr>
Avatar billede mclemens Nybegynder
08. maj 2007 - 23:04 #23
Prøv med:

selcs=["sel3","sel4","sel5"];

function initSels(){
  createOpts(document.getElementById('sel3'));
  if(a=document.getElementById("presel")){
    a=eval(a.firstChild.nodeValue);
    for(i=0;i<a.length;i++){
      elm=document.getElementById(selcs[i]);
      elmc=elm.getElementsByTagName("option");
      for(j=0;j<elmc.length;j++){
        if(elmc[j].value==a[i]){
          elm.selectedIndex=j;
          createOpts(elm,'sel3','sel4','sel5');
        }
      }
    }
  }
}

<tr>
  <td class="td32" width="15%">Test:<br><br></td>
  <td WIDTH="75%">
<select name="sel3" id="sel3" onchange="createOpts(this,'sel3','sel4','sel5');">
<option value="" selected>Vis alle</option>
</select><br><br>
  </td>
</tr>

...

<div id="presel" style="display:none;">["<?php echo $row[sel3]; ?>"]</div>
</body></html>

... Og så skal $row[sel3] være en af de første values i scriptet i
eksempel 08/05-2007 16:19:36 vil det svare til "Valg 1","Valg 2" eller andet

... Hvis der så nr. to select også skal være udfyldt så er det:

<div id="presel" style="display:none;">["<?php echo $row[sel3].'","'.$row[sel4]; ?>"]</div>
</body></html>

nr 3:

<div id="presel" style="display:none;">["<?php echo $row[sel3].'","'.$row[sel4].'","'.$row[sel5]; ?>"]</div>
</body></html>
Avatar billede mclemens Nybegynder
08. maj 2007 - 23:06 #24
Det extra script i initSels() sørger med andre ord for
at lede efter et element med id presel, gennemløber det
array af values og sammenligner med values fra multiselect
arr - arrayet ... ved match sætter den optionen til selected
og aktiverer den normale onchange så de nye selects bliver lavet.
Avatar billede mclemens Nybegynder
08. maj 2007 - 23:08 #25
Lidt nysgerrig efter hvad Roenving (08/05-2007 11:13:47)
når frem til, det er muligt at han har eller når
frem til noget lettere / mere optimalt.
Avatar billede roenving Novice
09. maj 2007 - 02:11 #26
Nej, mine bestræbelser gik bare en anden vej (en semi-generisk funktion !-), og jeg stødte ideligt på problemer med manglende initialisering af de options, der initieres vha. createOpts-tingen !o]
Avatar billede hoejgaard Juniormester
09. maj 2007 - 19:33 #27
mclemens
Jeg ka ikke rigtig få det til at virke..
Har du mulighed for selv at afprøve det, så jeg kan se hvordan det skal sættes op ??
Avatar billede mclemens Nybegynder
09. maj 2007 - 22:21 #28
Et php eksempel på 08/05-2007 16:19:36 er:
(Hvis værdierne ikke er der outputtes "" istedet nedenunder, dette er dog
ikke et krav for scriptet, så man kan undlade de efterfølgende værdier der
ikke er valgt i forvejen. Du skal ikke bekymre dig om selecten, men arbejde
med presel og lade den lave knokle arbejdet for dig. Det er dog bedre at
outputte ["a","a2"] end ["a","a2",""] eller ["","",""] for den sags skyld).
... Når du så bruger database skal du bare sørge for at du får de rigtige
værdier sat ind istedet for sessionværdierne, men kig på eksemplet ;)


<?php session_start();

if(isset($_GET['sel3']))$_SESSION['sel3']=$_GET['sel3'];
if(isset($_GET['sel4']))$_SESSION['sel4']=$_GET['sel4'];
if(isset($_GET['sel5']))$_SESSION['sel5']=$_GET['sel5'];

if(!isset($_SESSION['sel3']))$_SESSION['sel3']=$_SESSION['sel4']=$_SESSION['sel5']="";

?><!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html><head><meta http-equiv="content-type" content="text/html; charset=iso-8859-1"><title>Ingen titel</title>

<script language="javascript" type="text/javascript">
var arr = [
    ["a",[
        ["a1",
            ["a1-1","a1-2","a1-3","a1-4"]],
        ["a2",
            ["a2-1","a2-2","a2-3"]],
        ["a3",
            ["a3-1","a3-2","a3-3","a3-4"]]]],
    ["b",[
        ["b1",
            ["b1-1","b1-2","b1-3","b1-4"]],
        ["b2",
            ["b2-1","b2-2"]],
        ["b3",
            ["b3-1","b3-2","b3-3","b3-4"]],
        ["b4",
            ["b4-1","b4-2","b4-3","b4-4"]]]],
    ["c",[
        ["c1",
            ["c1-1","c1-2","c1-3"]],
        ["c2",
            ["c2-1","c2-2","c2-3"]],
        ["c3",
            ["c3-1","c3-2","c3-3"]],
        ["c4",
            ["c4-1","c4-2","c4-3"]],
        ["c5",
            ["c5-1","c5-2","c5-3"]]]]
];


function initSels(){
  createOpts(document.getElementById('sel3'));
  if(a=document.getElementById("presel")){
    a=eval(a.firstChild.nodeValue);
    for(i=0;i<a.length;i++){
      elm=document.getElementById("sel"+(i+3));
      elmc=elm.getElementsByTagName("option");
      for(j=0;j<elmc.length;j++){
        if(elmc[j].value==a[i]){
          elm.selectedIndex=j;
          createOpts(elm,'sel3','sel4','sel5');
        }
      }
    }
  }
}




function createOpts(sel){
    var s = new Array();
    var num = 0, txt = "arr";
    var ar = opt = null;
    var n = sel.selectedIndex;
    var args = createOpts.arguments.length;
    for(var i=1;args>i;i++){
        s[i-1] = document.getElementById(createOpts.arguments[i]);
        if(s[i-1]==sel)num=i;
    }
    if(args>1){
        if(s[num])sel = s[num];
        else return;
    }
    if(n==0&&args>1){
        for(i=num;args>i+1;i++){
            s[i].length = 0;
            opt = document.createElement('OPTION');
            s[i].appendChild(opt);
            opt.value = "";
            opt.text = "\74-- Vælg --";
        }
        return true
    };
    for(i=0;num>i;i++){
        txt+="["+(s[i].selectedIndex-1)+"][1]";
    }
    ar = eval(txt);
    sel.length = 0;
    opt = document.createElement('OPTION');
    sel.appendChild(opt);
  opt.value = "";
  opt.text = "-- Vælg --";
    for(i=0;ar.length>i;i++){
        opt = document.createElement('OPTION');
        sel.appendChild(opt);
        if(typeof ar[i] == 'object'){
          opt.value = ar[i][0];
          opt.text = ar[i][0];
        }else{
          opt.value = ar[i];
          opt.text = ar[i];
      }
    }
    if(args>num+2){
        for(i=num+1;args-1>i;i++){
            s[i].length = 0;
            opt = document.createElement('OPTION');
            s[i].appendChild(opt);
            opt.value = "";
            opt.text = "\74-- Vælg --";
        }
    }
}

</script>

</head><body onload="initSels();">

<form name="sels" action="test.php" method="get">
<select name="sel3" id="sel3" onchange="createOpts(this,'sel3','sel4','sel5');">
<option value="" selected>Vis alle</option>
</select>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
<select name="sel4" id="sel4" onchange="createOpts(this,'sel3','sel4','sel5');">
<option value="" selected>&lt;-- Vælg --</option>
</select>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
<select name="sel5" id="sel5">
<option value="" selected
>&lt;-- Vælg --</option>
</select>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br><br>
<input type="submit" value="ok">
</form>





<div id="presel" style="display:none;">[<?php echo"\"".$_SESSION['sel3']."\",\"".$_SESSION['sel4']."\",\"".$_SESSION['sel5']."\""; ?>]</div>

</body></html>
Avatar billede hoejgaard Juniormester
10. maj 2007 - 01:11 #29
Ja men de valgte værdier skulle gerne stå i select boksene..??
Det gør de ikke nu, der står stadig -Vælg- i alle 3 når jeg kommer tilbage til dem, selvom jeg har gemt værdierne..
Avatar billede mclemens Nybegynder
10. maj 2007 - 08:43 #30
09/05-2007 22:21:28 virker fint her, virker den ikke hos dig.
- Kald evt. filen for test.php og klik lidt frem og tilbage.

... Hvis den fil virker så er fejlfinding på din egen:

Er den function initSels(){ indskrevet ?

Bliver værdierne i presel udskrevet korrekt ?
(fjern evt. display:none midlertidig)
... Hvis ikke: Er cookies aktiveret ?

Har du id til sel3 , 4 og 5 ?

Hvilken browser bruger du ?

Er javascript aktiveret ?

Har du evt. et link ?
Avatar billede mclemens Nybegynder
10. maj 2007 - 08:44 #31
... Og hvis 09/05-2007 22:21:28 ikke virker så
må det være javascript eller cookies deaktiveret.
- Ellers så kast lige et link til siden.
Avatar billede hoejgaard Juniormester
10. maj 2007 - 16:03 #32
ved lidt klikken frem og tilbage kommer værdierne i boksene...
Når jeg så henter værdierne fra databasen og vil sættet dem ind vises de ikke..
De skal jo vises med det samme siden kaldes..

Har dette her :

<?
    include("db_kald_aaben.php");
    $query = mysql_query("SELECT * FROM test where brugernavn = 'asa' AND id='20'") or die(mysql_error());
    $row = mysql_fetch_array($query);
    include("db_kald_luk.php");



// if(isset($_POST['sel3']))$_SESSION['sel3']=$_POST['sel3'];
// if(isset($_POST['sel4']))$_SESSION['sel4']=$_POST['sel4'];
// if(isset($_POST['sel5']))$_SESSION['sel5']=$_POST['sel5'];

// if(empty($_POST['sel3']))$_POST['sel3']=$_POST['sel4']=$_POST['sel5']="";

?><!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html><head><meta http-equiv="content-type" content="text/html; charset=iso-8859-1"><title>Ingen titel</title>

<script language="javascript" type="text/javascript">
var arr = [
    ["Valg 1",[
        ["2. valg 1 (1)",
            ["3. valg 1 (1-1)","3. valg 2 (1-1)","3. valg 3 (1-1)","3. valg 4 (1-1)"]],
        ["2. valg 2 (1)",
            ["3. valg 1 (1-2)","3. valg 2 (1-2)","3. valg 3 (1-2)"]],
        ["2. valg 3 (1)",
            ["3. valg 1 (1-3)","3. valg 2 (1-3)","3. valg 3 (1-3)","3. valg 4 (1-3)"]]]],
    ["Valg 2",[
        ["2. valg 1 (2)",
            ["3. valg 1 (2-1)","3. valg 2 (2-1)","3. valg 3 (2-1)","3. valg 4 (2-1)"]],
        ["2. valg 2 (2)",
            ["3. valg 1 (2-2)","3. valg 2 (2-2)"]],
        ["2. valg 3 (2)",
            ["3. valg 1 (2-3)","3. valg 2 (2-3)","3. valg 3 (2-3)","3. valg 4 (2-3)","3. valg 5 (2-3)","3. valg 6 (2-3)","3. valg 7 (2-3)","3. valg 8 (2-3)","3. valg 9 (2-3)","3. valg 10 (2-3)","3. valg 11 (2-3)","3. valg 12 (2-3)","3. valg 13 (2-3)","3. valg 14 (2-3)","3. valg 15 (2-3)","3. valg 16 (2-3)","3. valg 17 (2-3)","3. valg 18 (2-3)","3. valg 19 (2-3)","3. valg 20 (2-3)","3. valg 21 (2-3)"]],
        ["2. valg 4 (2)",
            ["3. valg 1 (2-4)","3. valg 2 (2-4)","3. valg 3 (2-4)","3. valg 4 (2-4)"]]]],
    ["Valg 3",[
        ["2. valg 1 (3)",
            ["3. valg 1 (3-1)","3. valg 2 (3-1)","3. valg 3 (3-1)"]],
        ["2. valg 2 (3)",
            ["3. valg 1 (3-2)","3. valg 2 (3-2)","3. valg 3 (3-2)"]],
        ["2. valg 3 (3)",
            ["3. valg 1 (3-3)","3. valg 2 (3-3)","3. valg 3 (3-3)"]],
        ["2. valg 4 (3)",
            ["3. valg 1 (3-4)","3. valg 2 (3-4)","3. valg 3 (3-4)"]],
        ["2. valg 5 (3)",
            ["3. valg 1 (3-5)","3. valg 2 (3-5)","3. valg 3 (3-5)"]]]]
];



function initSels(){
  createOpts(document.getElementById('sel3'));
  if(a=document.getElementById("presel")){
    a=eval(a.firstChild.nodeValue);
    for(i=0;i<a.length;i++){
      elm=document.getElementById("sel"+(i+3));
      elmc=elm.getElementsByTagName("option");
      for(j=0;j<elmc.length;j++){
        if(elmc[j].value==a[i]){
          elm.selectedIndex=j;
          createOpts(elm,'sel3','sel4','sel5');
        }
      }
    }
  }
}




function createOpts(sel){
    var s = new Array();
    var num = 0, txt = "arr";
    var ar = opt = null;
    var n = sel.selectedIndex;
    var args = createOpts.arguments.length;
    for(var i=1;args>i;i++){
        s[i-1] = document.getElementById(createOpts.arguments[i]);
        if(s[i-1]==sel)num=i;
    }
    if(args>1){
        if(s[num])sel = s[num];
        else return;
    }
    if(n==0&&args>1){
        for(i=num;args>i+1;i++){
            s[i].length = 0;
            opt = document.createElement('OPTION');
            s[i].appendChild(opt);
            opt.value = "";
            opt.text = "\74-- Vælg --";
        }
        return true
    };
    for(i=0;num>i;i++){
        txt+="["+(s[i].selectedIndex-1)+"][1]";
    }
    ar = eval(txt);
    sel.length = 0;
    opt = document.createElement('OPTION');
    sel.appendChild(opt);
  opt.value = "";
  opt.text = "-- Vælg --";
    for(i=0;ar.length>i;i++){
        opt = document.createElement('OPTION');
        sel.appendChild(opt);
        if(typeof ar[i] == 'object'){
          opt.value = ar[i][0];
          opt.text = ar[i][0];
        }else{
          opt.value = ar[i];
          opt.text = ar[i];
      }
    }
    if(args>num+2){
        for(i=num+1;args-1>i;i++){
            s[i].length = 0;
            opt = document.createElement('OPTION');
            s[i].appendChild(opt);
            opt.value = "";
            opt.text = "\74-- Vælg --";
        }
    }
}

</script>

</head><body onload="initSels();">

<form name="sels" action="test.php" method="post">
<select name="sel3" id="sel3" onchange="createOpts(this,'sel3','sel4','sel5');">
<option value="" selected>Vis alle</option>
</select>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
<select name="sel4" id="sel4" onchange="createOpts(this,'sel3','sel4','sel5');">
<option value="" selected>&lt;-- Vælg --</option>
</select>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
<select name="sel5" id="sel5">
<option value="" selected
>&lt;-- Vælg --</option>
</select>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br><br>
<input type="submit" value="ok">
</form>





<div id="presel" [<?php echo"\"".$row[sel3]."\",\"".$row[sel4]."\",\"".$row[sel5]."\""; ?>]</div>

</body></html>
Avatar billede hoejgaard Juniormester
10. maj 2007 - 16:11 #33
nå nu får jeg noget frem, men kun hvis jeg klikker på opdater 2 gange...??????
og den første box viser stadig bare -Vælg-

Har ændret til
<div id="presel" style="display:none;">[<?php echo"\"".$row['sel3']."\",\"".$row['sel4']."\",\"".$row['sel5']."\""; ?>]</div>
Avatar billede mclemens Nybegynder
10. maj 2007 - 17:39 #34
"nå nu får jeg noget frem, men kun hvis jeg klikker på opdater 2 gange...??????"

- Sidder du på localhost og har problemer med at js ikke må køres ordentligt ?
... Ved test af 09/05-2007 22:21:28 virkede det med det samme hver gang host mig.

- Ryger dine variabler rigtigt nok ud, eller kommer resultatet ikke hver gang ?
... Fjern evt. style="display:none;" for at bug teste dette lettere.

"og den første box viser stadig bare -Vælg-"
Den eneste måde jeg kan få det til at passe sammen er ved at
værdierne i presel ikke matcher med values i arr ... Hvad
udskriver den ? Og matcher det med værdien i arr ? Husk at
" " og "&nbsp;" ikke er det samme, jeg kan ikke se hvordan
resultatet ser ud eller hvordan du gemmer det ...

Hvis du tager 10/05-2007 16:03:36 uden php, men med en korrekt presel
som denne: <div id="presel">["Valg 2","2. valg 3 (2)","3. valg 10 (2-3)"]</div>
... Så virker det fint, så der må gå noget galt ved din mysql indsættelse eller
output fra mysql. Vær opmærksom på at det kan være at parenteser mellemrum eller andet
er url-encodet / escapet og at det kan forårsage problemet med det skrevne i presel.
Avatar billede hoejgaard Juniormester
10. maj 2007 - 17:50 #35
Når jeg skriver :
<div id="presel">[<?php echo"\"".$row['sel3']."\",\"".$row['sel4']."\",\"".$row['sel5']."\""; ?>]</div>

erd et de rigtige værdier der kommer frem..
De kommer bare ikke frem med det samme i selve boksen...som beskrevet før..
Avatar billede mclemens Nybegynder
10. maj 2007 - 18:07 #36
<div id="presel">[<?php echo"\"".$row['sel3']."\",\"".$row['sel4']."\",\"".$row['sel5']."\""; ?>]</div>
Fortæller mig ikke at det er værdier der stemmer overens med det i arr arrayet.
- Har du prøvet en vis kilde ? Hvis du læser / prøver som i bunden af 10/05-2007
17:39:17 virker det, og det betyder højst sandsynligt at værdierne at værdierne
ikke bliver overført ordentligt, eller at du sidder på lokalhost og IE driller
med at deaktivere javascript hver anden gang du klikker rundt.
Avatar billede mclemens Nybegynder
10. maj 2007 - 18:20 #37
For lige at teste, 09/05-2007 22:21:28 virker
vel hos dig? Ellers hvad browser bruger du ?
Avatar billede hoejgaard Juniormester
10. maj 2007 - 19:42 #38
nå nu virker det, men det virker ikke ved integration i min form.. der er åbenbart nogle ting der ødelægger det... hmmm det er skutte nemt det her..
Avatar billede mclemens Nybegynder
10. maj 2007 - 19:56 #39
Måske har du flere window.onloads ? Hvis ja så kig på:
http://www.eksperten.dk/spm/775526#rid6724942

D.v.s. at <body onload="initSels();"> rettes til

var onloadQuote = window.onload;
window.onload=function(){
  if(onloadQuote) onloadQuote();
  initSels();
}

... Og måske det samme med den anden onload
- ellers kan onload="initSels();" bare fjernes fra
bodyen og initSels(); indsættes i den andens onload.
Tør ikke lige sige hvad der ødelægger det i din form.
Glemmer du at lukke elementer, har du flere form elementer
oveni hinanden eller er der ens id / navne i forvejen ?
Avatar billede hoejgaard Juniormester
10. maj 2007 - 20:22 #40
der er flere forme i en php fil, men ikke inden i hinanden....
Avatar billede mclemens Nybegynder
10. maj 2007 - 20:28 #41
Kalder du select boxene noget andet end sel3 , sel4 og sel5 ?
Hvis ja, så skal du rette function initSels(){
til den i bunden af 08/05-2007 16:19:36:

selcs=["sel3","sel4","sel5"];

function initSels(){
  createOpts(document.getElementById('sel3'));
  if(a=document.getElementById("presel")){
    a=eval(a.firstChild.nodeValue);
    for(i=0;i<a.length;i++){
      elm=document.getElementById(selcs[i]);
      elmc=elm.getElementsByTagName("option");
      for(j=0;j<elmc.length;j++){
        if(elmc[j].value==a[i]){
          elm.selectedIndex=j;
          createOpts(elm,'sel3','sel4','sel5');
        }
      }
    }
  }
}

... Så kan du rette navnene i selcs så det matcher.
Avatar billede mclemens Nybegynder
10. maj 2007 - 20:29 #42
samt createOpts selvfølgelig også ...
Avatar billede hoejgaard Juniormester
10. maj 2007 - 22:18 #43
Bare jeg indsætter en table i bunden går det galt :

<?php

include("db_kald_aaben.php");
    $query = mysql_query("SELECT * FROM test where brugernavn = 'asa' AND id='26'") or die(mysql_error());
    $row = mysql_fetch_array($query);
    include("db_kald_luk.php");

//if(!isset($_SESSION['sel3']))$_SESSION['sel3']=$_SESSION['sel4']=$_SESSION['sel5']="";

?><!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html><head><meta http-equiv="content-type" content="text/html; charset=iso-8859-1"><title>Ingen titel</title>

<script language="javascript" type="text/javascript">
var arr = [
    ["a",[
        ["a1",
            ["a1-1","a1-2","a1-3","a1-4"]],
        ["a2",
            ["a2-1","a2-2","a2-3"]],
        ["a3",
            ["a3-1","a3-2","a3-3","a3-4"]]]],
    ["b",[
        ["b1",
            ["b1-1","b1-2","b1-3","b1-4"]],
        ["b2",
            ["b2-1","b2-2"]],
        ["b3",
            ["b3-1","b3-2","b3-3","b3-4"]],
        ["b4",
            ["b4-1","b4-2","b4-3","b4-4"]]]],
    ["c",[
        ["c1",
            ["c1-1","c1-2","c1-3"]],
        ["c2",
            ["c2-1","c2-2","c2-3"]],
        ["c3",
            ["c3-1","c3-2","c3-3"]],
        ["c4",
            ["c4-1","c4-2","c4-3"]],
        ["c5",
            ["c5-1","c5-2","c5-3"]]]]
];


function initSels(){
  createOpts(document.getElementById('sel3'));
  if(a=document.getElementById("presel")){
    a=eval(a.firstChild.nodeValue);
    for(i=0;i<a.length;i++){
      elm=document.getElementById("sel"+(i+3));
      elmc=elm.getElementsByTagName("option");
      for(j=0;j<elmc.length;j++){
        if(elmc[j].value==a[i]){
          elm.selectedIndex=j;
          createOpts(elm,'sel3','sel4','sel5');
        }
      }
    }
  }
}




function createOpts(sel){
    var s = new Array();
    var num = 0, txt = "arr";
    var ar = opt = null;
    var n = sel.selectedIndex;
    var args = createOpts.arguments.length;
    for(var i=1;args>i;i++){
        s[i-1] = document.getElementById(createOpts.arguments[i]);
        if(s[i-1]==sel)num=i;
    }
    if(args>1){
        if(s[num])sel = s[num];
        else return;
    }
    if(n==0&&args>1){
        for(i=num;args>i+1;i++){
            s[i].length = 0;
            opt = document.createElement('OPTION');
            s[i].appendChild(opt);
            opt.value = "";
            opt.text = "\74-- Vælg --";
        }
        return true
    };
    for(i=0;num>i;i++){
        txt+="["+(s[i].selectedIndex-1)+"][1]";
    }
    ar = eval(txt);
    sel.length = 0;
    opt = document.createElement('OPTION');
    sel.appendChild(opt);
  opt.value = "";
  opt.text = "-- Vælg --";
    for(i=0;ar.length>i;i++){
        opt = document.createElement('OPTION');
        sel.appendChild(opt);
        if(typeof ar[i] == 'object'){
          opt.value = ar[i][0];
          opt.text = ar[i][0];
        }else{
          opt.value = ar[i];
          opt.text = ar[i];
      }
    }
    if(args>num+2){
        for(i=num+1;args-1>i;i++){
            s[i].length = 0;
            opt = document.createElement('OPTION');
            s[i].appendChild(opt);
            opt.value = "";
            opt.text = "\74-- Vælg --";
        }
    }
}

</script>

</head><body onload="initSels();">

<form name="sels" action="test.php" method="get">
<select name="sel3" id="sel3" onchange="createOpts(this,'sel3','sel4','sel5');">
<option value="" selected>Vis alle</option>
</select>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
<select name="sel4" id="sel4" onchange="createOpts(this,'sel3','sel4','sel5');">
<option value="" selected>&lt;-- Vælg --</option>
</select>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
<select name="sel5" id="sel5">
<option value="" selected
>&lt;-- Vælg --</option>
</select>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br><br>
<input type="submit" value="ok">
</form>
<div id="presel" >[<?php echo"\"".$row['sel3']."\",\"".$row['sel4']."\",\"".$row['sel5']."\""; ?>]</div>



<table cellspacing="0" cellpadding="0">
  <tr><td><img src="bund.gif"></td></tr>
</table>

</body></html>
Avatar billede mclemens Nybegynder
10. maj 2007 - 22:33 #44
Nej, det går fint med en tabel i bunder, der må være
noget galt med din php eller måden filen leveres på.
... Vil jeg skyde på, ellers er det browseren der ikke
understøtter det, du svarer ikke rigtig på mine spørgsmål.
(10/05-2007 08:43:13, 10/05-2007 17:39:17, 10/05-2007 18:20:48)

- Prøv at køre nedenstående eksempel, hvis det virker, så
er der noget galt i leveringen af php filen eller noget galt
med dit php script / values o.s.v.. Hvis nedenstående ikke virker
så: Hvilken browser bruger du, har du javascript aktiveret i den ?


<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html><head><meta http-equiv="content-type" content="text/html; charset=iso-8859-1"><title>Ingen titel</title>

<script language="javascript" type="text/javascript">
var arr = [
    ["a",[
        ["a1",
            ["a1-1","a1-2","a1-3","a1-4"]],
        ["a2",
            ["a2-1","a2-2","a2-3"]],
        ["a3",
            ["a3-1","a3-2","a3-3","a3-4"]]]],
    ["b",[
        ["b1",
            ["b1-1","b1-2","b1-3","b1-4"]],
        ["b2",
            ["b2-1","b2-2"]],
        ["b3",
            ["b3-1","b3-2","b3-3","b3-4"]],
        ["b4",
            ["b4-1","b4-2","b4-3","b4-4"]]]],
    ["c",[
        ["c1",
            ["c1-1","c1-2","c1-3"]],
        ["c2",
            ["c2-1","c2-2","c2-3"]],
        ["c3",
            ["c3-1","c3-2","c3-3"]],
        ["c4",
            ["c4-1","c4-2","c4-3"]],
        ["c5",
            ["c5-1","c5-2","c5-3"]]]]
];


function initSels(){
  createOpts(document.getElementById('sel3'));
  if(a=document.getElementById("presel")){
    a=eval(a.firstChild.nodeValue);
    for(i=0;i<a.length;i++){
      elm=document.getElementById("sel"+(i+3));
      elmc=elm.getElementsByTagName("option");
      for(j=0;j<elmc.length;j++){
        if(elmc[j].value==a[i]){
          elm.selectedIndex=j;
          createOpts(elm,'sel3','sel4','sel5');
        }
      }
    }
  }
}




function createOpts(sel){
    var s = new Array();
    var num = 0, txt = "arr";
    var ar = opt = null;
    var n = sel.selectedIndex;
    var args = createOpts.arguments.length;
    for(var i=1;args>i;i++){
        s[i-1] = document.getElementById(createOpts.arguments[i]);
        if(s[i-1]==sel)num=i;
    }
    if(args>1){
        if(s[num])sel = s[num];
        else return;
    }
    if(n==0&&args>1){
        for(i=num;args>i+1;i++){
            s[i].length = 0;
            opt = document.createElement('OPTION');
            s[i].appendChild(opt);
            opt.value = "";
            opt.text = "\74-- Vælg --";
        }
        return true
    };
    for(i=0;num>i;i++){
        txt+="["+(s[i].selectedIndex-1)+"][1]";
    }
    ar = eval(txt);
    sel.length = 0;
    opt = document.createElement('OPTION');
    sel.appendChild(opt);
  opt.value = "";
  opt.text = "-- Vælg --";
    for(i=0;ar.length>i;i++){
        opt = document.createElement('OPTION');
        sel.appendChild(opt);
        if(typeof ar[i] == 'object'){
          opt.value = ar[i][0];
          opt.text = ar[i][0];
        }else{
          opt.value = ar[i];
          opt.text = ar[i];
      }
    }
    if(args>num+2){
        for(i=num+1;args-1>i;i++){
            s[i].length = 0;
            opt = document.createElement('OPTION');
            s[i].appendChild(opt);
            opt.value = "";
            opt.text = "\74-- Vælg --";
        }
    }
}

</script>

</head><body onload="initSels();">

<form name="sels" action="test.php" method="get">
<select name="sel3" id="sel3" onchange="createOpts(this,'sel3','sel4','sel5');">
<option value="" selected>Vis alle</option>
</select>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
<select name="sel4" id="sel4" onchange="createOpts(this,'sel3','sel4','sel5');">
<option value="" selected>&lt;-- Vælg --</option>
</select>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
<select name="sel5" id="sel5">
<option value="" selected
>&lt;-- Vælg --</option>
</select>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br><br>
<input type="submit" value="ok">
</form>
<div id="presel" >["a","a2","a2-3"]</div>



<table cellspacing="0" cellpadding="0">
  <tr><td><img src="bund.gif"></td></tr>
</table>

</body></html>
Avatar billede hoejgaard Juniormester
10. maj 2007 - 23:01 #45
det virker ikke pga :  <img src="bund.gif"> 

fjerner jeg bare det virker det.

Jeg bruger IE 6.0
Ved ikke hvor jeg ser om javascript er aktiveret.?
Avatar billede hoejgaard Juniormester
10. maj 2007 - 23:05 #46
hvis det er active scripting, så er det aktiveret..
Avatar billede hoejgaard Juniormester
10. maj 2007 - 23:29 #47
Det virker søreme i firefox.....
Men det skulle da også gerne virke IE
Avatar billede mclemens Nybegynder
11. maj 2007 - 08:54 #48
"Jeg bruger IE 6.0" - Tak for hjælpen.
Kunne ikke lige se hvorfor det ikke skulle
virke i IE6, men efter at have testet kan jeg
se at den er mere sløv i det end min IE7 og FF...

Hvis jeg retter initSels() til:

function initSels(){
  createOpts(document.getElementById('sel3'));
  if(a=document.getElementById("presel")){
    a=eval(a.firstChild.nodeValue);
    for(i=3;i<6;i++)setTimeout("autosel('"+i+"','"+a[i-3]+"')",(10*i-2));
  }
}

og tilføjer:

function autosel(i,v){
  elm=document.getElementById("sel"+i);
  elmc=elm.getElementsByTagName("option");
  for(j=0;j<elmc.length;j++){
    if(elmc[j].value==v){
      elm.selectedIndex=j;
      createOpts(elm,'sel3','sel4','sel5');
    }
  }
}


Så virker den i min IE6, da denne linje her med timeout kald til næste funktion:
    for(i=3;i<6;i++)setTimeout("autosel('"+i+"','"+a[i-3]+"')",(10*i-2));
... Sørger for at IE6 har noget længere tid at gennemføre ændringerne i dom på.
- Jeg går umiddelbart udfra at det er det som tager lidt ekstra tid for IE6.
Hvis du øger tallet 10 i ovenstående får den længere tid imellem ændringerne,
hvis du sænker tallet går der kortere tid imellem ændringerne, men for lavt et
tal istedet for 10 tallet i (10*i-2) gør at den måske ikke vil i IE6 som tidligere.
Avatar billede mclemens Nybegynder
11. maj 2007 - 08:56 #49
Det kan godt være, at 10 tallet skal være højere afhængig af sidens
opbygning, men prøv at skrue lidt op på tallet, hvis den ikke vil.
Avatar billede hoejgaard Juniormester
11. maj 2007 - 14:23 #50
Nu har jeg sat den til 50 og det virker både i IE 6.0 og Firefox ! Fedt....

Kan det ske at det alligevel ikke vil virke i andre brugeres browsere, selvom de kører med den samme browser ??
Avatar billede mclemens Nybegynder
11. maj 2007 - 14:44 #51
"
Kan det ske at det alligevel ikke vil virke i andre brugeres browsere, selvom de kører med den samme browser ??"
Hvis de har deaktiveret javascript, så virker hverken Roenvings hovedscript
eller mine tilføjelser - ellers burde det virke i alle browsere, at IE6 lige
har en langsom dom forbindelse eller lige skal timeout'e lidt er så noget andet.
Avatar billede mclemens Nybegynder
11. maj 2007 - 14:46 #52
Edit: i alle browsere - skal være: i alle nyere browsere, jeg kender
ikke til javascripting i ældre browsere som f.eks. netscape 4 og ie 4...
Avatar billede roenving Novice
11. maj 2007 - 14:47 #53
Det skal du vist være glad for !-)
Avatar billede hoejgaard Juniormester
11. maj 2007 - 15:32 #54
mclemens
Jamen det lyder jo godt.. Fedt at det kom til at virke..Takker tigtig mange gange for hjælpen !

roenving
også en tak til dig for hovedscriptet, men syntes at pointsne skal gå til mclemens for hans store indsats....
Hvad mente du med "Det skal du vist være glad for !-)" ??
Avatar billede roenving Novice
11. maj 2007 - 15:42 #55
Det var en kommentar til Clemmes sidste kommentar ...
Avatar billede mclemens Nybegynder
11. maj 2007 - 18:12 #56
Hoejgaard, velbekom og tak for point. :o)

Roenving, det er jeg også. :o)
Avatar billede hoejgaard Juniormester
23. maj 2007 - 01:44 #57
mclemens
der er lige en ting med scriptet, hvis man fastholder valget i box nr. 1, men skifter mellem forsk. værdier i box nr. 2 så tilpasser box nr. 3 sig ikke i bredden, og nogle af de lange tekststrenge i box nr. 3 kan så ikke ses helt..
Er det muligt at fixe det mon ??
Avatar billede mclemens Nybegynder
23. maj 2007 - 15:40 #58
Problemet eksisterer ved at IE<7 ikke genberegner select boxen's width
baseret på den indvendige tekst efter at options er blevet tilføjet / fjernet.
... For at gøre dette skal elementet tilføjes til dokumentet med alle options
tilføjet, så genberegnes width på elementet så det matcher med options.
... Egentlig en ting jeg ikke lod mærke til ved Roenvings script, men det
er åbenbart grundet manipulering / tilføjelse - slettelse af options at
IE6 ikke vil lege med :-/ ... IE7 og min FF vil godt være med til det.

"Er det muligt at fixe det mon ??"
Udfra ovenstående problemstilling er der 2 måder:
a) Omskriv scriptet så det bruger udskiftning af select
b) Gør så der tages en kopi af selecten og kopien erstatter originalen.

Vi vælger b, da det er det nemmeste og nok mest optimale.

Helt nede i bunden af
function createOpts(sel){
erstatter du den sidste "}" med:

  a=sel.cloneNode(true);
  sel.parentNode.replaceChild(a,sel);
}
Avatar billede mclemens Nybegynder
23. maj 2007 - 15:56 #59
Men det bedste ville nok være at style width
på select boxene istedet til det maximale behov
( style="width:200px" eller andet antal px)
... så boxens bredde ikke "hopper" frem og tilbage.
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Vi tilbyder markedets bedste kurser inden for webudvikling

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester