05. maj 2003 - 15:10Der er
52 kommentarer og 1 løsning
Dropdown list som er afhængig af anden dropdown
jeg har 2 dropdown menuer (list/menu) som jeg genre vil gøre anhængige af hinanden til en søgefunktion.
eks. jeg har en produktsøgning hvor brugeren kan søge på mærke og kategori (værdierne til dropdown kommer fra en tabel med mærke og en tabel med kategori). hvordan gør man så hvis brugeren vælger Nike så bliver der kun vist de kategorier som Nike har produkter i ?
okay - nu kom jeg i tanke om noget smart - ved ikke om det kan lade sig gøre. jeg har en tabel med mærke og en med kategori - men det er jo ikke sikkert at der er nogle produkter indenfor de enkelte. derfor kunne man lave drodown menuerne så de ikke indeholder værdierne fra mærke tabellen, men fra produkt tabellen. men så skal den jo vide at den kun skal vise hver mærke 1 gang. så kan brugeren jo egentlig ikke foretage en tom søgning - det ville være smart :) hehe but i dont know how ?
Hvis du ændrer feltnavne og rs navne til dit eget, vil du kunne bruge dette til at generere array med
<% 'Standard Replace funktion function VBreplace(thetext) if isNull(thetext) then thetext = "" newstring = Replace(cStr(thetext),"'","|pE|") newstring = Replace(newstring,"\","\\") VBreplace = newstring end function
if (NOT rsSubKat.EOF) THEN
'Her laver vi JS array udfra DB udtræks Response.Write("<sc" & "ript type=""text/javascript"">"&chr(10)) Response.Write("var what = new Array();"&chr(10))
oldmainid = 0 newmainid = rsSubKat("MainId") if (NOT IsNumeric(newmainid)) THEN newmainid = cStr(newmainid) END IF if (oldmainid = newmainid) THEN oldmainid = "" END IF n = 0 while (NOT SubKat.EOF) if (oldmainid <> newmainid) THEN Response.Write("what[" & n & "] = new Array();"&chr(10)) Response.Write("what[" & n & "][0] = '" & VBreplace(newmainid) & "';"&chr(10)) m = 1 END IF
Response.Write("what[" & n & "][" & m & "] = new Array();"&chr(10)) Response.Write("what[" & n & "][" & m & "][0] = " & "'" & VBreplace(SubKat("ID")) & "'" & ";" &chr(10)) Response.Write("what[" & n & "][" & m & "][1] = " & "'" & VBreplace(SubKat("kategori")) & "'" & ";" &chr(10)) m=m+1 if (cStr(oldmainid) = "0") THEN oldmainid = newmainid END IF oldmainid = newmainid SubKat.MoveNext() if (NOT SubKat.EOF) THEN newmainid = SubKat("MainId") END IF if (NOT IsNumeric(newmainid)) THEN newmainid = cStr(newmainid) END IF if (oldmainid <> newmainid) THEN n=n+1 END IF WEND
Response.Write("var SubKat_what = what;"&chr(10)) Response.Write("what = null;"&chr(10)) Response.Write("</sc" & "ript>"&chr(10)) END IF if (NOT SubKat.BOF) THEN SubKat.MoveFirst() END IF %>
<% 'Standard Replace funktion function VBreplace(thetext) if isNull(thetext) then thetext = "" newstring = Replace(cStr(thetext),"'","|pE|") newstring = Replace(newstring,"\","\\") VBreplace = newstring end function
if (NOT rscategory.EOF) THEN
'Her laver vi JS array udfra DB udtræks Response.Write("<sc" & "ript type=""text/javascript"">"&chr(10)) Response.Write("var what = new Array();"&chr(10))
oldmainid = 0 newmainid = rscategory("IDcategory") if (NOT IsNumeric(newmainid)) THEN newmainid = cStr(newmainid) END IF if (oldmainid = newmainid) THEN oldmainid = "" END IF n = 0 while (NOT category.EOF) if (oldmainid <> newmainid) THEN Response.Write("what[" & n & "] = new Array();"&chr(10)) Response.Write("what[" & n & "][0] = '" & VBreplace(newmainid) & "';"&chr(10)) m = 1 END IF
Response.Write("what[" & n & "][" & m & "] = new Array();"&chr(10)) Response.Write("what[" & n & "][" & m & "][0] = " & "'" & VBreplace(category("ID")) & "'" & ";" &chr(10)) Response.Write("what[" & n & "][" & m & "][1] = " & "'" & VBreplace(category("kategori")) & "'" & ";" &chr(10)) m=m+1 if (cStr(oldmainid) = "0") THEN oldmainid = newmainid END IF oldmainid = newmainid category.MoveNext() if (NOT category.EOF) THEN newmainid = category("IDcategory") END IF if (NOT IsNumeric(newmainid)) THEN newmainid = cStr(newmainid) END IF if (oldmainid <> newmainid) THEN n=n+1 END IF WEND
Response.Write("var category_what = what;"&chr(10)) Response.Write("what = null;"&chr(10)) Response.Write("</sc" & "ript>"&chr(10)) END IF if (NOT category.BOF) THEN category.MoveFirst() END IF %>
jeg har lavet 2 recordset - brand og category i brand hedder min værdi = Brand i category hedder den = Category
nu ser koden sådan ud: <% 'Standard Replace funktion function VBreplace(thetext) if isNull(thetext) then thetext = "" newstring = Replace(cStr(thetext),"'","|pE|") newstring = Replace(newstring,"\","\\") VBreplace = newstring end function
if (NOT rsbrand.EOF) THEN
'Her laver vi JS array udfra DB udtræks Response.Write("<sc" & "ript type=""text/javascript"">"&chr(10)) Response.Write("var what = new Array();"&chr(10))
oldmainid = 0 newmainid = rsbrand("IDbrand") if (NOT IsNumeric(newmainid)) THEN newmainid = cStr(newmainid) END IF if (oldmainid = newmainid) THEN oldmainid = "" END IF n = 0 while (NOT brand.EOF) if (oldmainid <> newmainid) THEN Response.Write("what[" & n & "] = new Array();"&chr(10)) Response.Write("what[" & n & "][0] = '" & VBreplace(newmainid) & "';"&chr(10)) m = 1 END IF
Response.Write("what[" & n & "][" & m & "] = new Array();"&chr(10)) Response.Write("what[" & n & "][" & m & "][0] = " & "'" & VBreplace(brand("ID")) & "'" & ";" &chr(10)) Response.Write("what[" & n & "][" & m & "][1] = " & "'" & VBreplace(brand("brand")) & "'" & ";" &chr(10)) m=m+1 if (cStr(oldmainid) = "0") THEN oldmainid = newmainid END IF oldmainid = newmainid brand.MoveNext() if (NOT brand.EOF) THEN newmainid = brand("IDbrand") END IF if (NOT IsNumeric(newmainid)) THEN newmainid = cStr(newmainid) END IF if (oldmainid <> newmainid) THEN n=n+1 END IF WEND
Response.Write("var brand_what = what;"&chr(10)) Response.Write("what = null;"&chr(10)) Response.Write("</sc" & "ript>"&chr(10)) END IF if (NOT brand.BOF) THEN brand.MoveFirst() END IF %>
<html> <head> <% 'Standard Replace funktion function VBreplace(thetext) if isNull(thetext) then thetext = "" newstring = Replace(cStr(thetext),"'","|pE|") newstring = Replace(newstring,"\","\\") VBreplace = newstring end function
if (NOT brand.EOF) THEN
'Her laver vi JS array udfra DB udtræks Response.Write("<sc" & "ript type=""text/javascript"">"&chr(10)) Response.Write("var what = new Array();"&chr(10))
oldmainid = 0 newmainid = brand("IDbrand") if (NOT IsNumeric(newmainid)) THEN newmainid = cStr(newmainid) END IF if (oldmainid = newmainid) THEN oldmainid = "" END IF n = 0 while (NOT brand.EOF) if (oldmainid <> newmainid) THEN Response.Write("what[" & n & "] = new Array();"&chr(10)) Response.Write("what[" & n & "][0] = '" & VBreplace(newmainid) & "';"&chr(10)) m = 1 END IF
Response.Write("what[" & n & "][" & m & "] = new Array();"&chr(10)) Response.Write("what[" & n & "][" & m & "][0] = " & "'" & VBreplace(brand("ID")) & "'" & ";" &chr(10)) Response.Write("what[" & n & "][" & m & "][1] = " & "'" & VBreplace(brand("brand")) & "'" & ";" &chr(10)) m=m+1 if (cStr(oldmainid) = "0") THEN oldmainid = newmainid END IF oldmainid = newmainid brand.MoveNext() if (NOT brand.EOF) THEN newmainid = brand("IDbrand") END IF if (NOT IsNumeric(newmainid)) THEN newmainid = cStr(newmainid) END IF if (oldmainid <> newmainid) THEN n=n+1 END IF WEND
Response.Write("var brand_what = what;"&chr(10)) Response.Write("what = null;"&chr(10)) Response.Write("</sc" & "ript>"&chr(10)) END IF if (NOT brand.BOF) THEN brand.MoveFirst() END IF %>
det er ikke fordi jeg vil være en pain... men er det muligt at gøre sådan at brugeren kan vælge begge dele fra starten. eksempelvis ligesom på http://www.sneakersnstuff.com - det er drømme løsningen :) (bare uden den der ekstra brand som de smider på når man har valgt kategori)
jeg har svært ved at gennemskue hvilke værdiet jeg skal sætte i stedet for: <option value="<% Response.Write rs("ID") %>"><% Response.Write rs("fabrikantNavn") %></option> ID og fabrikantNavn - er det nogle du definerer eller skal jeg tage den fra min tabel ? (total spørge-jørgen her til morgen :)
<%@LANGUAGE="VBSCRIPT" CODEPAGE="1252"%> <!--#include file="Connections/capitol.asp" --> <% Dim brand Dim brand_numRows
Set brand = Server.CreateObject("ADODB.Recordset") brand.ActiveConnection = MM_capitol_STRING brand.Source = "SELECT * FROM brand ORDER BY Brand ASC" brand.CursorType = 0 brand.CursorLocation = 2 brand.LockType = 1 brand.Open()
brand_numRows = 0 %> <% Dim category Dim category_numRows
Set category = Server.CreateObject("ADODB.Recordset") category.ActiveConnection = MM_capitol_STRING category.Source = "SELECT * FROM category ORDER BY Category ASC" category.CursorType = 0 category.CursorLocation = 2 category.LockType = 1 category.Open()
category_numRows = 0 %> <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> <html> <head> <title></title> <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1"> <% ' Replace funktion Function VBreplace(thetext) If isNull(thetext) Then thetext = "" newstring = Replace(cStr(thetext),"'","|pE|") newstring = Replace(newstring,"\","\\") VBreplace = newstring End Function
If (Not brand.EOF) Then
'Her laver vi JS array udfra DB udtræk Response.Write("<sc" & "ript type=""text/javascript"">"&chr(10)) Response.Write("var what = new Array();"&chr(10))
oldmainid = 0 newmainid = brand("IDbrand") If (Not IsNumeric(newmainid)) Then newmainid = cStr(newmainid) End If If (oldmainid = newmainid) Then oldmainid = "" End If n = 0 While (Not brand.EOF) If (oldmainid <> newmainid) Then Response.Write("what[" & n & "] = new Array();"&chr(10)) Response.Write("what[" & n & "][0] = '" & VBreplace(newmainid) & "';"&chr(10)) m = 1 End If
Response.Write("what[" & n & "][" & m & "] = new Array();"&chr(10)) Response.Write("what[" & n & "][" & m & "][0] = " & "'" & VBreplace(brand("ID")) & "'" & ";" &chr(10)) Response.Write("what[" & n & "][" & m & "][1] = " & "'" & VBreplace(brand("fabrikantNavn")) & "'" & ";" &chr(10)) m = m +1
If (cStr(oldmainid) = "0") Then oldmainid = newmainid End If oldmainid = newmainid brand.MoveNext() If (Not brand.EOF) Then newmainid = brand("IDbrand") End If If (Not IsNumeric(newmainid)) Then newmainid = cStr(newmainid) End If If (oldmainid <> newmainid) Then n=n+1 End If Wend
Response.Write("var brand_what = what;"&chr(10)) Response.Write("what = null;"&chr(10)) Response.Write("</sc" & "ript>"&chr(10)) End If
If (Not brand.BOF) Then brand.MoveFirst() End If %> <script type="text/JavaScript"> ALT JAVA har jeg slet ikke rørt </script> </head> <body> <form method="post" action=""> <table border="0" cellpadding="3"> <tr> <td> <p><select name="brand" id="brand" onChange="makeSubList(brand_what,findObj('brand'),findObj('category'),0,0,false,':');enableSel('category');"> <option value="">Choose brand</option> <% strSQL = "SELECT * FROM brand WHERE dBvalg = 1" Set rs = conn.Execute(strSQL)
Do %> <option value="<% Response.Write rs("ID") %>"><% Response.Write rs("fabrikantNavn") %></option> <% rs.MoveNext Loop While Not rs.EOF rs.Close %> </select></p> <p><select name="category" class="text" id="category" disabled> <option value="">Choose category</option> <% strSQL = "select * from category" Set rs = conn.Execute(strSQL)
Do %> <option value="<% Response.Write rs("ID") %>"><% Response.Write rs("fabrikantNavn") %></option> <% rs.MoveNext Loop While Not rs.EOF %> </select></p></td> </tr> </table> </form> </body> </html> <% brand.Close() Set brand = Nothing %> <% category.Close() Set category = Nothing %>
Peter - tror du man kan lave SQL´en så den kun viser de brands og categories som der rent faktisk er oprettet produkter til ? så den laver en SELECT DISTINCT fra produkt tabellen og det så er den den bruger til at søge efter ?
pelkjaer - du må sige til hvis der er ting som er svært at huske...
1. man skal kunne vælge fra begge dropdown på samme tid, og kun 1 hvis man ønsker det 2. resultatet skal vises i http://www.capitolshop.dk/products.asp 3. filen med de to dropdown skal indsættes som include i de andre filer
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.