Avatar billede andersbl Nybegynder
30. januar 2010 - 16:36 Der er 2 kommentarer og
1 løsning

Ændre indholde af dropdown menu, baseret på en anden dropdown (3 i alt)

Hej Eksperter
Jeg har en form, hvor jeg skal kunne vælge nogle dropdown-menuer. Det funger sådan, at vælger du fx Audi i den første bliver den næste dropdown ændret til kun at indeholde Audi-modeller. Når man så vælger i næste dropdown Audi-Modellen, får du fx år. Dvs. de er altså dynamiske baseret på hvad der er valgt først.

Mit Problem er, hvis man har valgt som mit eksempel, og man så ændre første dropdown til BMW, så skal 2 og 3 dropdown ændres. Jeg har lidt med at den ikke ændre det hele i dropdown-menuen. Forstår faktisk ikke hvorfor den skriver som den gør.

Håber nogen kan hjælpe. Har tænkt lidt om det kræver at man HIDE og SHOW, så der er to forskellige dropdown-menu?





======================= KODE =========================

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN"
  "http://www.w3.org/TR/html4/strict.dtd">
<html lang="en">
<head>
<title>Change selection in one box from another</title>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<script type="text/javascript">
var varieties=[
["varieties","granny smith","golden delicious","jonathan"],
["varieties","anjou","bartlett","conference"],
["varieties","valencia","pineapple","pera", "test"]
];
var all=[
["1", "2", "3"]
];

function Box2(idx) {
var f=document.myform;
alert(idx);
f.box2.options.length=null;
    for(i=0; i<varieties[idx].length; i++) {
        f.box2.options[i]=new Option(varieties[idx][i], i);
    }   
    for(i=0; i<all[0].length; i++) {
        f.box3.options[i]=new Option(all[0][i], i);
    }
}

function Box3(idx) {
var f=document.myform;
alert(idx);
f.box3.options.length=null;
for(i=0; i<varieties[idx].length; i++) {
    f.box3.options[i]=new Option(varieties[idx][i], i);
    }   
}

onload=function() {Box2(0);};
</script>
</head>
<body>
<form name="myform" method="post" action="#">
<div>
<select name="box1" onChange="Box2(this.selectedIndex)">
    <option value="a">apple</option>
    <option value="b">pear</option>
    <option value="c">orange</option>
</select>
<select name="box2" onChange="Box3(this.selectedIndex)"></select>
<select name="box3"></select>

</div>
</form>
</body>
</html>
Avatar billede stigma Nybegynder
30. januar 2010 - 18:23 #1
I stedet for at srive this.selectedIndex i din onchange attribut. så prøv at skriv this.value, da jeg mener det er sådan man henter den valgte værdi i en dropdown men.

Det er i hvert fald sådan jeg gør når jeg bruger det...

Mvh Jeppe
Avatar billede andersbl Nybegynder
31. januar 2010 - 13:44 #2
det du omtaler er ikke et problem, men at indholdet i den tredje dropdown bliver mikset med andre værdier, i de arrays som sætter værdierne i dropdown'en.

Du kan prøve at køre den kode jeg har sendt.
Avatar billede andersbl Nybegynder
31. januar 2010 - 15:00 #3
Har selv løst problemer, ved at tilføje en funktion der sletter alt indholdet i dropdown,menuen og fylder den op igen. Så den på en måde bliver reset.

Hvis nogen kan bruge eksemplet, sender jeg det her.
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN"
  "http://www.w3.org/TR/html4/strict.dtd">
<html lang="en">
<head>
<title>Change selection in one box from another</title>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<script type="text/javascript">
function removeAllOptions(selectbox)
{
var i;
for(i=selectbox.options.length-1;i>=0;i--)
{
selectbox.remove(i);
}
}

var varieties=[
["varieties","granny smith","golden delicious","jonathan"],
["varieties","anjou","bartlett","conference"],
["varieties","valencia","pineapple","pera", "test"]
];
var all=[
["1", "2", "3"]
];

function Box2(idx) {
document.getElementById('box3').length = 0; // Cleaner dropdownliste
var f=document.myform;
alert(idx);

f.box2.options.length=null;
    for(i=0; i<varieties[idx].length; i++) {
        f.box2.options[i]=new Option(varieties[idx][i], i);
    }   
    for(i=0; i<all[0].length; i++) {
        f.box3.options[i]=new Option(all[0][i], i);
    }
}

function Box3(idx) {

var f=document.myform;
alert(idx);
f.box3.options.length=null;
    for(i=0; i<varieties[idx].length; i++) {
        f.box3.options[i]=new Option(varieties[idx][i], i);
    }   
}

onload=function() {Box2(0);};
</script>
</head>
<body>
<form name="myform" method="post" action="#">
<div>
<select name="box1" onChange="Box2(this.selectedIndex)">
    <option value="a">apple</option>
    <option value="b">pear</option>
    <option value="c">orange</option>
</select>
<select name="box2" onChange="Box3(this.selectedIndex)"></select>
<select name="box3" id='box3'></select>

</div>
</form>
</body>
</html>
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