Avatar billede mrjowns Novice
29. marts 2005 - 15:08 Der er 4 kommentarer og
2 løsninger

2 afhængige drop-downs med value

Jeg har brug for noget kode, hvor 2 drop-down bokse er afhængige. Dvs. at når man vælger noget i den ene drop-down, gives der nye muligheder i den anden.

Dog dog dog...

Et sådan et script er relativt nemt at finde på nettet (f.eks. http://hotarea.com/fast/bodyBuilder.pl?show+javascript&form_elements&formsDropDown2D.html), men disse har en enkelt fejl: Når formularen postes er værdien af den givne drop-down boks lig med det der står mellem <option>xxx</option>. Jeg vil gerne finde en JavaScript kode, hvor jeg har muligheden for <option value="yyy">xxx</option> - dvs. at værdien der postes er den der står i value.

Er der nogen der kan hjælpe med det?
Avatar billede strickie Nybegynder
29. marts 2005 - 16:21 #1
I det eksempel script du henviser til, har følgende kode:
for( i = 0; i < arrayData.length; i++ ) {
  string = arrayData[i].split( "|" );
  if( string[0] == name ) {
    select.options[count++] = new Option( string[1]);
  }
}

Hvis man istedet giver new Option() to parametre i stedet altså f.eks. select.options[count++] = new Option( string[1], "VALUE");
Er parameter 2 value til <option>'en.

Det er selvfølgeligt ikke et komplet ekesmpel, men det giver vel en ide om hvad der skal ske.
Avatar billede roenving Novice
29. marts 2005 - 20:36 #2
f.eks. kan du benytte ovenstående kode næsten uændret:

arrayData[0] = "Navn|tekst|value";

function fillSelect(name){
var sel = document.getElementById('dinSelect'),str;
for( i = 0; i < arrayData.length; i++ ) {
  str = arrayData[i].split( "|" );
  if( str[0] == name ) {
    sel.options[count++] = new Option( str[1], str[2] );
  }
}

}
Avatar billede mrjowns Novice
30. marts 2005 - 14:08 #3
roenving > Jeg er ikke helt stiv i JavaScript... Vil du ikke poste hele løsningen? Please? ...og som et svar så du kan få nogle point... ;)
Avatar billede mrjowns Novice
30. marts 2005 - 14:35 #4
Kan ikke få det til at virke:

<script type="text/javascript" language="javascript">

var arrayData = new Array();

arrayData[0]    = 'SALES|[SAL] User 01|1'
arrayData[1]    = 'SALES|[SAL] User 02|2'
arrayData[2]    = 'SALES|[SAL] User 03|3'
arrayData[3]    = 'MARKETING|[MAR] User 01|4'
arrayData[4]    = 'MARKETING|[MAR] User 02|5'
arrayData[5]    = 'MARKETING|[MAR] User 03|6'
arrayData[6]    = 'TECHNOLOGY|[TEC] User 01|7'
arrayData[7]    = 'TECHNOLOGY|[TEC] User 02|8'
arrayData[8]    = 'TECHNOLOGY|[TEC] User 03|9'

function fillSelect(name)
{
  var sel = document.getElementById('SubCategory'),str;
  for( i = 0; i < arrayData.length; i++ )
  {
    str = arrayData[i].split( "|" );
    if( str[0] == name )
    {
      sel.options[count++] = new Option( str[1], str[2] );
    }
  }
}

</script>

<select name="category" style="width:120;" onchange="java script:fillSelect( this.options[selectedIndex].text )">
    <option>SALES</option>
    <option>MARKETING</option>
    <option>TECHNOLOGY</option>
</select>
<select name="SubCategory" id="SubCategory" style="width:120;">
</select>
Avatar billede strickie Nybegynder
30. marts 2005 - 14:51 #5
Prøv denne her. NOTE: jeg har smidt en onchange="alert(this.value)" ind så man kan se hvad værdien er når man klikker på select box nr 2. Den skal du selvfølgeligt bar fjerne igen.

<html>
<head>
<script language="Javascript">

var arrayData = new Array();

arrayData[0]    = 'SALES|[SAL] User 01|1'
arrayData[1]    = 'SALES|[SAL] User 02|2'
arrayData[2]    = 'SALES|[SAL] User 03|3'
arrayData[3]    = 'MARKETING|[MAR] User 01|4'
arrayData[4]    = 'MARKETING|[MAR] User 02|5'
arrayData[5]    = 'MARKETING|[MAR] User 03|6'
arrayData[6]    = 'TECHNOLOGY|[TEC] User 01|7'
arrayData[7]    = 'TECHNOLOGY|[TEC] User 02|8'
arrayData[8]    = 'TECHNOLOGY|[TEC] User 03|9'


function populateData( name ) {

    select    = window.document.form.SubCategory;
    string    = "";

        // 0 - will display the new options only
        // 1 - will display the first existing option plus the new options

    count    = 0;

        // Clear the old list (above element 0)

    select.options.length = count;

        // Place all matching categories into Options.

    for( i = 0; i < arrayData.length; i++ ) {
        string = arrayData[i].split( "|" );
        if( string[0] == name ) {
            select.options[count++] = new Option( string[1], string[2] );
        }
    }

        // Set which option from subcategory is to be selected

//    select.options.selectedIndex = 2;

        // Give subcategory focus and select it

//    select.focus();

}

</script>
</head>
<body>

<table cellpadding=4 cellspacing=0 border=0>
    <tr>
        <form name=form method=post action="">
        <td><span class=DefMenuText>Departments</span><br>
            <select name='category' size=3 style="width:120;"
                onChange='java script:populateData( this.options[selectedIndex].text )'>
                    <option>SALES</option>
                    <option>MARKETING</option>
                    <option>TECHNOLOGY</option>
            </select>
        </td>
        <td><span class=DefMenuText>Department Users</span><br>
            <select name="SubCategory" size=3 style="width:120;" onchange="alert(this.value);">
            </select>
        </td>
        </form>
    </tr>
</table>

</body>
</html>
Avatar billede mrjowns Novice
31. marts 2005 - 11:25 #6
Weee, it works!!! Tak for hjælpen! Så er der point!!!
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