Avatar billede cskaade Nybegynder
06. december 2001 - 14:53 Der er 11 kommentarer og
1 løsning

2 dropdown box på samme side


Jeg skal bruge et script som opdater den anden dropdown box når man har valgt noget i den første hvordan får man det til at funger når det meget gerne skal være på en side.

Jeg har fundet et kombineret asp og JavaScript som er gør så den henter den nederste del af siden når du har valg noget i den første men det er ikke særlig optimalt når der skal være en del felter neden under den anden box da koden fylder en del har jeg ikke sat den ind her.

Håber der er nogle som kan hjælpe mig.
Avatar billede nute Nybegynder
06. december 2001 - 14:55 #1
du skal ha fatt i noe JavaScript...

<html>
<script>

var ns4x = document.layers?true:false;

function transferValue( newForm ){
  // Finner antall options i selectbox
  var len = newForm.sel2.length;
    // Finner index til den valgte option
    var sel = newForm.sel1.selectedIndex;
    // Henter option Objektet
    var optionObjekt = newForm.sel1.options[ sel ];
   
    // Sjekker om det første element er valgt. Hvis det er det, så skal ingen verdi overføres
    if( sel > 0 ){
        // Henter den valgte verdi
      var verdi = optionObjekt.value;
        // Overfører verdien
        newForm.sel2.options[ len ] = new Option( verdi, verdi );
        // Sletter verdien fra den opprinnelige selectbox
        newForm.sel1.options[ newForm.sel1.selectedIndex ] = null;
       
        // frembringer resultatet i Netscape 4.x
        if( ns4x ){
          history.go(0);
        }
    }
}
</script>
<body>
<form name=\"form1\" method=\"get\" action=\"\">
<select name=\"sel1\" onChange=\"transferValue(this.form);\" title=\"Knut\">
  <option value=\"\"></option>
  <option value=\"Verdi 1\">Verdi 1</option>
  <option value=\"Verdi 2\">Verdi 2</option>
  <option value=\"Verdi 3\">Verdi 3</option>
  <option value=\"Verdi 4\">Verdi 4</option>
</select>
<br>
<select name=\"sel2\"></select>
</form>
</body></html>
Avatar billede cskaade Nybegynder
06. december 2001 - 15:12 #2
>>nute det er sådan at den værdi som kommer til at så i box 2 skal hentes fra en database da værdien af hænger af hvad der bliver valg i box 1 værdien i boks 1 skulle også gerne hendes fra en database det kan jeg dog godt selv se hvordan jeg får den til.
Avatar billede nute Nybegynder
06. december 2001 - 15:17 #3
du mener med andre ord at hele innholdet av box skal endres alt etter valg i box 1 ?? Fx

hvis \'Madonna\' er valgt i box 1, så skal options i box 2 være \'Like a virgin\', \'Broken\' og \'Guy Richie\', men hvis \'Pink Floyd\' er valgt i box 1 så skal options i box 2 være \'The wall\', \'Animals\' og \'Another brick in the Wall\'.

Er dette korrekt ?

/nute
Avatar billede cskaade Nybegynder
06. december 2001 - 15:18 #4
yeps det er helt korrekt
Avatar billede nute Nybegynder
06. december 2001 - 15:22 #5
hmm....ønsker du en forklaring på hvordan du løser problemet eller et eksempel på løsning ?
Avatar billede cskaade Nybegynder
06. december 2001 - 15:24 #6
jeg ønsker en forklaring på hvordan og evt. et eksempel på det.
Avatar billede nute Nybegynder
06. december 2001 - 15:51 #7
du er nødt til å legge alle verdiene du ønsker vist i box 2 inn i en JavaScript array istedenfor å legge dem ned i en selectbox. hvis jeg skulle gjort det samme, ville jeg ha gjort noe ála dette:

<html>
<head>
<script>
  contentArr = new Array();
   
    function fillList( id ){
      // Deleting all options
      document.frm.targetSel.options.length = 0;
        tmpArr = contentArr[ id ];
        for( i = 0; i < tmpArr.length; i++ ){
          document.frm.targetSel.options[ document.frm.targetSel.options.length ] = new Option( tmpArr[ i ], tmpArr[ i ] );
        }
    }
   
</script>
</head>
<body>
<form name=\"frm\">
<select name=\"box\" onchange=\"fillList( this.selectedIndex );\">
  <option value=\"\"></option>
  <%
    SQL = \"SELECT * FROM dinTabell\"
    Set RS = Conn.Execute( SQL )
    mainCounter = 0;
    subCounter = 0;
    while NOT RS.EOF
      response.write \"<option value=\"\"\" & RS(\"ID\") & \"\"\">\" & RS(\"ID\") & \"</option>\"
        subSQL = \"SELECT * FROM dinAndreTabell WHERE ID = \" & RS(\"ID\")
        Set subRS = Conn.Execute( subSQL )
        while NOT subRS.EOF
          %>
            <script>
            subArr = new Array();
            subArr[<%= subCounter %>] = \'<%= subRS(\"kolonne\") %>\';
            </script>
            <%
            subCounter = subCounter + 1
            subRS.MoveNext
        wend
        subRS.Close
        Set subRS = nothing
        %>
        <script>
        contentArr[<%= mainCounter %>] = subArr;
        </script>
        <%
        mainCounter = mainCounter + 1;
      RS.MoveNext
    wend
    RS.Close
    Set RS = nothing
    %>
</select><br>
<select name=\"targetSel\">
<option value=\"\"></option>
</select>
</form>
</body>
</html>

dette er ikke testet med en fungerende databasse, men i prinsippet skal det fungere...

/nute
Avatar billede cskaade Nybegynder
06. december 2001 - 23:23 #8
nu har jeg kun et lille problem og det er at den ikke skriver alle posterne som den skal men den skriver kun den sidste den laver godt nok plads til dem alle sammen se evt. her under

her skriver den ikke noget
her skriver den ikke noget
her skriver den ikke noget
her skriver den noget

jeg har sat koden ind igen her hvis jeg skulle ha klokket i den.

<html>
<head>
<script>
  contentArr = new Array();
   
    function fillList( id ){
      // Deleting all options
      document.frm.targetSel.options.length = 0;
        tmpArr = contentArr[ id ];
        for( i = 0; i < tmpArr.length; i++ ){
          document.frm.targetSel.options[ document.frm.targetSel.options.length ] = new Option( tmpArr[ i ], tmpArr[ i ] );
        }
    }
   
</script>
</head>
<body>
<form name=\"frm\">
<select name=\"box\" onchange=\"fillList( this.selectedIndex );\">
  <option value=\"\">Vælg Amt</option>
  <!-- #include file=\"database.asp\" -->
  <%
    SQL = \"SELECT * FROM AMT\"
    Set RS = Conn.Execute( SQL )
    mainCounter = 1
    subCounter = 1
    while NOT RS.EOF
      response.write \"<option value=\"\"\" & RS(\"AMT\") & \"\"\">\" & RS(\"AMT\") & \"</option>\"
        subSQL = \"SELECT * FROM KOMMUNER WHERE AMT = \'\" & RS(\"AMT\") &\"\'\"
        Set subRS = Conn.Execute( subSQL )
        while NOT subRS.EOF
          %>
            <script>
            subArr = new Array();
            subArr[<%= subCounter %>] = \'<%= subRS(\"KOMMUNE\") %>\';
            </script>
            <%
            subCounter = subCounter + 1
            subRS.MoveNext
        wend
        subRS.Close
        Set subRS = nothing
        %>
        <script>
        contentArr[<%= mainCounter %>] = subArr;
        </script>
        <%
        mainCounter = mainCounter + 1
      RS.MoveNext
    wend
    RS.Close
    Set RS = nothing
    %>
</select><br>
<select name=\"targetSel\">
<option value=\"\"></option>
</select>
</form>
</body>
</html>

Avatar billede cskaade Nybegynder
06. december 2001 - 23:28 #9
dette er alså har man har valgt i box 1 så glemer den at skrive alle sammen i box 2
Avatar billede nute Nybegynder
06. december 2001 - 23:30 #10
jeg skal prøve å gjenskape din database og kjøre en liten test på det...
Avatar billede nute Nybegynder
07. december 2001 - 00:16 #11
oki...jeg kan godt se at det var noe galt. Denne kode fungerer iallefall for meg...håper det er tilstrekkelig...

<html>
<head>
<script>
  var contentArr, subArr, tmp;
    contentArr = new Array();
    subArr = new Array();
    contentArr[0] = null;
    mainCounter = 1;
    subCounter = 0;
   
    function fillList( id ){
      // Deleting all options
      document.frm.targetSel.options.length = 0;

            if( id > 0 ){
        tmpArr = contentArr[ id ];
        for( i = 0; i < tmpArr.length; i++ ){
          document.frm.targetSel.options[ document.frm.targetSel.options.length ] = new Option( tmpArr[ i ], tmpArr[ i ] );
        }
            }
    }
   
</script>
</head>
<body>
<form name=\"frm\">
<select name=\"box\" onchange=\"fillList( this.selectedIndex );\">
  <option value=\"\">Vælg Amt</option>
  <!-- #include file=\"database.asp\" -->
  <%
       
    SQL = \"SELECT * FROM AMT\"
    Set RS = Conn.Execute( SQL )
    mainCounter = 1
    subCounter = 1
    while NOT RS.EOF
      response.write \"<option value=\"\"\" & RS(\"AMT\") & \"\"\">\" & RS(\"AMT\") & \"</option>\"
        subSQL = \"SELECT * FROM KOMMUNER WHERE AMT = \'\" & RS(\"AMT\") &\"\'\"
        Set subRS = Conn.Execute( subSQL )
        while NOT subRS.EOF
          %>
            <script>
            subArr[ subCounter ] = \'<%= subRS(\"KOMMUNE\") %>\';                       
                        subCounter++;
            </script>
            <%
            subRS.MoveNext
        wend
        subRS.Close
        Set subRS = nothing
        %>
        <script>
        contentArr[ mainCounter ] = subArr;
                mainCounter++;
        subArr = new Array();
                subCounter = 0;
        </script>
        <%
      RS.MoveNext
    wend
    RS.Close
    Set RS = nothing
    %>
</select><br>
<select name=\"targetSel\">
<option value=\"\"></option>
</select>
</form>
</body>
</html>

/nute
Avatar billede cskaade Nybegynder
07. december 2001 - 00:22 #12
Jeg takker mange gang nute det funger bare som det skal nu.
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
Kurser inden for grundlæggende programmering

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