Avatar billede gatez Nybegynder
29. december 2004 - 13:18 Der er 8 kommentarer og
1 løsning

Dropdown boks skift

Hejsa,

Hvordan laver jeg to dropdown bokse hvor man i den ene vælger "bilmærke" og derefter kan vælge "bilmodel" i den anden ?
Jeg vil gerne have det til at virker sådan at når man fx. vælger BMW i den først boks som har value="2" så skal den dropdown boks med div id="2" blive vist, men det virker bare ikke ?!?

<div>
<font class="content"><b>Bil M&aelig;rke:</b></font><br>
<select name="producent" onchange="for(i=0;3>i;i++){ document.getElementById('l'+i).style.display='none';} document.getElementById('l'+this.selectedIndex).style.display='block';">
  <option value="1" selected="selected">V&aelig;lg</option>
  <option value="2">BMW</option>
  <option value="3">VW</option>
  <option value="4">test</option>
</select>
</div>

<div id="1" style="display:block;">
<font class="content"><b>Model:</b></font><br>
<select name="model-disabled" disabled>
  <option value="error" selected="selected">V&aelig;lg</option>
</select>
</div>

<div id="2" style="display:none;">
<font class="content"><b>Model:</b></font><br>
<select name="2">
  <option value="error" selected="selected">V&aelig;lg</option>
  <option value="E30">E30</option>
  <option value="E34">E34</option>
  <option value="E36">E36</option>
  <option value="E46">E46</option>
</select>
</div>

<div id="3" style="display:none;">
<font class="content"><b>Model:</b></font><br>
<select name="3">
  <option value="error" selected="selected">Model:</option>
  <option value="Golf III">Golf III</option>
</select>
</div>

<div id="4" style="display:none;">
<font class="content"><b>Model:</b></font><br>
<select name="4">
  <option value="error" selected="selected">Model:</option>
  <option value="Test">Test</option>
</select>
</div>
Avatar billede yellow Nybegynder
29. december 2004 - 13:54 #1
<select name="producent" onchange="for(i=0;3>i;i++){ document.getElementById(i+1).style.display='none';} document.getElementById(this.value).style.display='block';">
Avatar billede yellow Nybegynder
29. december 2004 - 13:57 #2
ovenstående får dit script til at virke...en alternativ måde at lave det på er at generere nr2 dropdown dynamisk - sådan plejer jeg selv at gøre det i hvert fald:

<script type="text/javascript">
  // producentID¤modelNavn¤modelID
  arrModels = ['1¤E30¤1','1¤E34¤2','1¤E36¤3','1¤E46¤4','2¤Golf III¤5','3¤Test¤6',];       

  function populateModels( myForm ){         
    myForm.model.length = 1;
    if( myForm.producent.value != "#" ){
      for( counter in arrModels ){
        tmpArr = arrModels[counter].split("¤");
        if( myForm.producent.value ==  tmpArr[0] ){
          var myModel = new Option(tmpArr[1], tmpArr[2]);
          myForm.model.options[myForm.model.length] = myModel;
        }
      }
      myForm.model.disabled = false;
    }
  }
</script>
<form>
    <font class="content"><b>Bil M&aelig;rke:</b></font><br>
    <select name="producent" onchange="populateModels( this.form );">
      <option value="#" selected>V&aelig;lg</option>
      <option value="1">BMW</option>
      <option value="2">VW</option>
      <option value="3">test</option>
    </select>
    <p>
    <font class="content"><b>Model:</b></font><br>
    <select name="model" disabled>
      <option value="#" selected>V&aelig;lg</option>
    </select>
</form>

Den lidt kryptiske arrModels streng kan du som regel hente ud fra et helt recordset med producentid, modelnavn og modelid via en ado "getRows" funktion...altså hvis du har dine data gemt i databaseformat el.lign.
Avatar billede olebole Juniormester
29. december 2004 - 14:57 #3
<ole>

En lidt mere effektiv omskrivning:

arrModels = [[1,"E30",1], [1,"E34",2], [1,"E36",3], [1,"E46",4], [2,"Golf III",5], [3,"Test",6]];       

function populateModels( myForm ){
    var myModel;       
    myForm.model.length = 1;
    if( myForm.producent.value != "#" ){
        for( i=0,j=arrModels.length; i<j; i++ ){
            if( myForm.producent.value ==  arrModels[i][0] ){
                myModel = new Option(arrModels[i][1], arrModels[i][2]);
                myForm.model.options[myForm.model.length] = myModel;
            }
        }
        myForm.model.disabled = false;
    }
}

/mvh
</bole>
Avatar billede gatez Nybegynder
29. december 2004 - 22:54 #4
--> Yellow

Yes, det virker sq... ;)  Meeeen hvordan sætter jeg value på den nederst boks til at være = det sidste tal her: [1,"Golf 3",86]

    <select name="model" disabled>
      <option value="86" selected>V&aelig;lg</option>
    </select>
??
Avatar billede gatez Nybegynder
29. december 2004 - 23:23 #5
Jeg skal nemlig have en "onchange" på den dropdown som viser modellerne.
Derfor skal value på den være = id på den model...
Avatar billede yellow Nybegynder
29. december 2004 - 23:33 #6
det skulle den allerede være hvis du bruger ovenstående script...

prøv bare at sætte den nederste dropdown til:
    <select name="model" disabled onchange="alert(this.value);">
      <option value="#" selected>V&aelig;lg</option>
    </select>
Avatar billede gatez Nybegynder
30. december 2004 - 00:52 #7
Ja, den indeholder allerede et tal, dog bare det forkerte tal ;)
Tag fx.:  2¤Golf III¤5
Lige nu tager den nr "2" men jeg vil gerne have den til at tage nr "5", altså det sidste tal.

Og så skal value se sådan ud:  "visbil.asp?id=5"
Kan man ikke det ?

Takker!
Avatar billede gatez Nybegynder
30. december 2004 - 01:01 #8
--> Yellow
Sorry, det var min fejl... den skriver det rigtige tal ;)

Men jeg kan dog stadig ikke få den til at skrive "visbil.asp?id=x" foran ??
Avatar billede gatez Nybegynder
30. december 2004 - 02:03 #9
Jag løste det sådan:
onchange="if (this.selectedIndex!=0) location.href='visbil.asp?id='+this.value"

Mange tak for hjælpen & godt nytår ;)
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