Avatar billede cygnet Praktikant
02. august 2003 - 19:02 Der er 5 kommentarer og
1 løsning

Dropdowns afhængige af hinanden

Hvordan laver jeg to dropdowns der er afhængige af hinanden ?

Det er nok en kombination af ASP og JavaScript.

Jeg har lige nu de to dropdowns der bliver lavet på følgende måde :

  <%

'Åbn databasen
 
 
sql = "SELECT * from [gruppe] ORDER BY titel desc"
    set rstemp = conntemp.execute(sql)
   

do while not (rstemp.eof or rstemp.bof)
      response.write "<option value=""" & rstemp("id") & """>" & rstemp("Titel") & "</option>"
     
    rstemp.movenext
    loop
    rstemp.close
   
         
  'Luk databasen

 
 
  %>
        </select>
   
          <select name="mnr">
            <%

'Åbn databasen
 
 
sql = "SELECT * from [marke] ORDER BY titel desc"
    set rstemp = conntemp.execute(sql)
   
do while not (rstemp.eof or rstemp.bof)
      response.write "<option value=""" & rstemp("id") & """>" & rstemp("Titel") & "</option>"
     
    rstemp.movenext
    loop
    rstemp.close

  %>
          </select>

I den første kommer vare gupper og i den næste mærker.
I tabellen [gruppe] - er der feltet ID og Titel
I tabellen [marke] - er der ID, Nr og Titel

Hvor nr i [marke] skal henvise til ID i [gruppe]

Er det bøvlet skrevet ?
Avatar billede whatever Nybegynder
02. august 2003 - 20:52 #1
Prøv dette:

<% @LANGUAGE = VBScript %>
<%

    Option Explicit

    Dim conn, sqlGruppe, sqlMaerke, rs, arrGrupper, arrMaerker, printGrupper, printJs, i, j, count

    Set conn = Server.CreateObject("ADODB.Connection")
    conn.Open "DRIVER={MySql}; SERVER=localhost; DATABASE=eksperten; UID=root; PWD="

    sqlGruppe = "SELECT id,titel FROM [gruppe] ORDER BY titel DESC"
    sqlMaerk = "SELECT nr,id,titel FROM [marke] ORDER BY titel DESC"
   
    Set rs = conn.Execute(sqlGruppe)
    arrGrupper = rs.GetRows()
    rs.Close
    Set rs = Nothing
   
    Set rs = conn.Execute(sqlMaerk)
    arrMaerker = rs.GetRows()
    rs.Close
    Set rs = Nothing
   
    conn.Close
    Set conn = Nothing
   
    For i = 0 to Ubound(arrGrupper,2)
        printGrupper = printGrupper & "<option value=""" & arrGrupper(0,i)  &""">" & arrGrupper(1,i) & "</option>" & VbCrLf
        printJs = printJs & "maerker[" & arrGrupper(0,i) & "] = new Array ("
        count = 0
        For j = 0 to Ubound(arrMaerker,2)
            If arrMaerker(0,j) = arrGrupper(0,i) Then
                If count = 0 Then
                    printJs = printJs & "'0#Vælg gruppe','" & arrMaerker(1,j) & "#" & arrMaerker(2,j) & "'"
                Else
                    printJs = printJs & ",'" & arrMaerker(1,j) & "#" & arrMaerker(2,j) & "'"
                End If
                count = count + 1
            End If
        Next
        printJs = printJs & ")" & VbCrLf
    Next

%>

<html>
<head>
<script language"JavaScript">
<!--

var maerker = new Array()
maerker[0] = new Array ('0#Vælg først en gruppe')
<%= printJs %>

function getMaerker() {
  var frm = document.formular;
  var gruppe_id = frm.list_grupper.value;
  var i; 
  frm.list_maerker.options.length = 0;
  for (i = 0; i < maerker[gruppe_id].length; i++) {
    arr_split = maerker[gruppe_id][i].split("#");
    var no = new Option();
    no.value = arr_split[0];
    no.text = arr_split[1];
    frm.list_maerker[i] = no;
  }
}

//-->
</script>
</head>

<body>
<form name="formular">

<select name="list_grupper" style="width:150" onchange="getMaerker()">
<option value="0">Vælg gruppe</option>
<%= printGrupper %>
</select>

<select name="list_maerker" style="width:150">
<option>Vælg først en gruppe</option>
</select>

<input type="button" onclick="alert(document.formular.list_maerker.value)" value="Hent value for valgt maerke" />

</form>
</body>
</html>


Det er lige omskrevet fra amter og kommuner, til grupper og mærker. Og da det ikke er testet kan der være nogle fejl i det.

Huske lige at din database connection, pt. benytter den en mysql connection.
Avatar billede whatever Nybegynder
02. august 2003 - 20:54 #2
Du kan se det oprindelige script i funktion her: http://www.efusion.it/exp/302058.php. Det oprindelige script jeg lavede var i PHP, men omskrev til ASP på et tidpunkt til en her på eksperten.
Avatar billede cygnet Praktikant
02. august 2003 - 21:15 #3
Det ser godt ud - altså det i php, men kan ikke lige få det at virke.

Men ser vist også ud til det er lavet til sql - kan du gøre så det fungere med

Set conntemp = Server.CreateObject("ADODB.Connection")
  DSN = "DRIVER={Microsoft Access Driver (*.mdb)}; DBQ=" & server.mappath("db.mdb") & "; UID=Administrator; PWD="
  conntemp.open DSN
Avatar billede whatever Nybegynder
02. august 2003 - 21:20 #4
Prøv dette:

<% @LANGUAGE = VBScript %>
<%

    Option Explicit

    Dim conntemp, DSN, sqlGruppe, sqlMaerke, rs, arrGrupper, arrMaerker, printGrupper, printJs, i, j, count

    Set conntemp = Server.CreateObject("ADODB.Connection")
    DSN = "DRIVER={Microsoft Access Driver (*.mdb)}; DBQ=" & server.mappath("db.mdb") & "; UID=Administrator; PWD="
    conntemp.open DSN

    sqlGruppe = "SELECT id,titel FROM [gruppe] ORDER BY titel DESC"
    sqlMaerk = "SELECT nr,id,titel FROM [marke] ORDER BY titel DESC"
   
    Set rs = conntemp.Execute(sqlGruppe)
    arrGrupper = rs.GetRows()
    rs.Close
    Set rs = Nothing
   
    Set rs = conntemp.Execute(sqlMaerk)
    arrMaerker = rs.GetRows()
    rs.Close
    Set rs = Nothing
   
    conntemp.Close
    Set conntemp = Nothing
   
    For i = 0 to Ubound(arrGrupper,2)
        printGrupper = printGrupper & "<option value=""" & arrGrupper(0,i)  &""">" & arrGrupper(1,i) & "</option>" & VbCrLf
        printJs = printJs & "maerker[" & arrGrupper(0,i) & "] = new Array ("
        count = 0
        For j = 0 to Ubound(arrMaerker,2)
            If arrMaerker(0,j) = arrGrupper(0,i) Then
                If count = 0 Then
                    printJs = printJs & "'0#Vælg gruppe','" & arrMaerker(1,j) & "#" & arrMaerker(2,j) & "'"
                Else
                    printJs = printJs & ",'" & arrMaerker(1,j) & "#" & arrMaerker(2,j) & "'"
                End If
                count = count + 1
            End If
        Next
        printJs = printJs & ")" & VbCrLf
    Next

%>

<html>
<head>
<script language"JavaScript">
<!--

var maerker = new Array()
maerker[0] = new Array ('0#Vælg først en gruppe')
<%= printJs %>

function getMaerker() {
  var frm = document.formular;
  var gruppe_id = frm.list_grupper.value;
  var i; 
  frm.list_maerker.options.length = 0;
  for (i = 0; i < maerker[gruppe_id].length; i++) {
    arr_split = maerker[gruppe_id][i].split("#");
    var no = new Option();
    no.value = arr_split[0];
    no.text = arr_split[1];
    frm.list_maerker[i] = no;
  }
}

//-->
</script>
</head>

<body>
<form name="formular">

<select name="list_grupper" style="width:150" onchange="getMaerker()">
<option value="0">Vælg gruppe</option>
<%= printGrupper %>
</select>

<select name="list_maerker" style="width:150">
<option>Vælg først en gruppe</option>
</select>

<input type="button" onclick="alert(document.formular.list_maerker.value)" value="Hent value for valgt maerke" />

</form>
</body>
</html>
Avatar billede cygnet Praktikant
02. august 2003 - 21:29 #5
ser sgu godt nok ...
Avatar billede whatever Nybegynder
02. august 2003 - 21:31 #6
Tak for pointene.
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