AsaMedlem sedan dec. 20011 860 inlägg Jag har en selectruta där jag hämtar en huvudkategori och när jag väljer ett alternativ vill jag att alla underkategorier som finns under den man väljer visas i närsta selectruta utan att sidan laddas om!
Jag har så här nu:
<%Set RecSet = Conn.Execute("Select * From artiklar Where id=" & Request.QueryString("id"))%>
<tr>
<td width="165"><b>Huvudkategori: </b><br>
<select name="typ" style="width: 140">
<option value="">-- Välj --
<%Set UIDES = Conn.Execute("SELECT * From kategori Where id <> '' Order By namn")
Do Until UIDES.EOF%>
<option value="<%=UIDES("namn")%>" <%If RecSet("typ") = UIDES("id") Then Response.Write " SELECTED"%>><%=UIDES("namn")%><br>
<%UIDES.MoveNext
Loop%>
</select>
</td>
<td width="235"><b>Underkategori: </b><br>
<select name="kat" style="width: 140">
<option value="">-- Välj --
<%Set RS=Conn.Execute("Select * From kategori Where uid='" & RecSet("typ") & "' Order By namn")
Do Until RS.EOF%>
<option value="<%=RS("namn")%>" <%If RecSet("kat") = RS("namn") Then Response.Write " SELECTED"%>><%=RS("namn")%><br>
<%RS.MoveNext
Loop%>
</select>
</td>
</tr>
Hoppas nån kan hjälpa mig och att det går!
solbulleMedlem sedan mars 20015 287 inlägg solbulleMedlem sedan mars 20015 287 inlägg Hur många huvudkategorier har du? Samt ungefär hur många underkategorier per huvudkategori?
AsaMedlem sedan dec. 20011 860 inlägg Det är olika! Man lägger till dem till databasen så det varierar!
PatrikBMedlem sedan mars 20002 836 inlägg Hur ser dina tabeller ut i databasen?
Tabellnamn
- falt1
- falt2
etc.
cya,
PatrikB
AsaMedlem sedan dec. 20011 860 inlägg
id uid Namn AU
DVD Action 0
DVD Tecknat 0
DVD Animerat 0
VHS Action 0
VHS Action 0
DVD DVD 3
Motor Motor 0
PC PC 0
VHS VHS 2
id är huvudkat, uid är underkat och AU är antal underkategorier under id
Hoppas du fattar
PatrikBMedlem sedan mars 20002 836 inlägg Är det endast en tabell du jobbar mot??
Vad heter tabellen?
cya,
PatrikB
PatrikBMedlem sedan mars 20002 836 inlägg testa detta:
<%
Option Explicit
Response.Buffer = True
Dim strConnString
Dim strSQLkat
Dim strSQLskat
Dim objConn
Dim rstKategori
Dim rstSubKategori
Dim varKategori
Dim varSubKategori
Dim strId
Dim strName
Dim I
Dim strUID
Dim strLastUID
Dim intCounter
strConnString = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & Server.MapPath("/db-folder/db-file.mdb")
strSQLkat = "SELECT * FROM Kategori WHERE id <> '' ORDER BY Namn ASC"
Set objConn = Server.CreateObject("ADODB.Connection")
objConn.Open strConnString
Set rstKategori = objConn.Execute(strSQLkat)
If Not rstKategori.EOF Then varKategori = rstKategori.GetRows()
Set rstKategori = Nothing
strSQLskat = "SELECT * FROM Kategori WHERE uid <> '' ORDER BY uid ASC, Namn ASC"
Set rstSubKategori = objConn.Execute(strSQLskat)
varSubKategori = rstSubKategori.GetRows()
Set rstSubKategori = Nothing
objConn.Close
Set objConn = Nothing
%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<title>dynamiska menyer i javascript</title>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
<SCRIPT language="javascript">
function boxData(sText, vValue){
this.text = sText;
this.value = vValue;
}
function populateBox(obj, icase){
// alert(icase);
igr = icase;
vgr = eval("vMan" + igr);
if (igr){
obj.length = (vgr.length);
for(n=0;n<vgr.length;n++){
obj.options[n].value = vgr[n].value;
obj.options[n].text = vgr[n].text;
}
obj.selectedIndex = 0
}else{
obj.length = 1;
for(n=0;n<obj.length;n++){
obj.options[n].value = 0;
obj.options[n].text = obj.options[n].text;
}
obj.selectedIndex = 1;
}
}
// -- populeras med asp. det är dessa arrayer som ska populeras i andra selectboxen
// beroende på selectbox1 value --
<%
If IsArray(varSubKategori) Then
intCounter = 0
For I = 0 TO UBound(varSubKategori,2)
strUID = varSubKategori(1,I)
strName = varSubKategori(2,I)
If strUID <> strLastUID Then
Response.Write "vMan" & strUID & " = new Array();" & vbcrlf
intCounter = 0
End If
Response.Write "vMan" & strUID & "[" & intCounter & "] = new boxData(""" & strName & """,""" & strUID & """);" & vbcrlf
strLastUID = strUID
intCounter = intCounter + 1
Next
End If
%>
// var vMan1 = new Array();
// vMan1[0] = new boxData("stad 1 land 1",1);
// vMan1[1] = new boxData("stad 2 land 1",2);
// vMan1[2] = new boxData("stad 3 land 1",3);
// vMan1[3] = new boxData("stad 4 land 1",4);
// var vMan2 = new Array();
// vMan2[0] = new boxData("stad 1 land 2",1);
// vMan2[1] = new boxData("stad 2 land 2",2);
// vMan2[2] = new boxData("stad 3 land 2",3);
// vMan2[3] = new boxData("stad 4 land 2",4);
// -- slut populeringen av arryer med asp --
</SCRIPT>
</head>
<body bgcolor="#FFFFFF" text="#000000">
<form name="form1" method="post" action="">
<select name="select" onChange="populateBox(document.form1.select2,this.options[selectedIndex].value);">
<option value="0" selected>Välj kategori</option>
<%
If IsArray(varKategori) Then
For I = 0 TO UBound(varKategori,2)
strId = varKategori(0,I)
strName = varKategori(2,I)
%>
<option value="<% =strId%>"><% =strName%></option>
<%
Next
End If
%>
</select>
<select name="select2">
<option value="0" selected>Ingen kategori vald</option>
</select>
</form>
</body>
</html>
Du kommer dock att få ett javascript fel om inga subkategorier finns till en huvudkategori ...... kan ej hjälpa dig där då jag inte e riktigt hemma på Javascript ... testa i javascript-forumet med det.
cya,
PatrikB
AsaMedlem sedan dec. 20011 860 inlägg En tabell med namn kategorier!
AsaMedlem sedan dec. 20011 860 inlägg Tackar för det! Funkar fint förrutom det du sa om javascriptet!
AsaMedlem sedan dec. 20011 860 inlägg Om jag inte vill använda GetRows då? Gör ite det i min aspkod och blir svårt att ändra till Getrows!
Min omgjorda kod:
<%Set Conn = Server.CreateObject("ADODB.Connection")
Conn.Open = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & Server.MapPath("db/webshop.mdb")
Set RS = Conn.Execute("SELECT * FROM Kategori WHERE id <> '' ORDER BY Namn ASC")
If Not RS.EOF Then HKat = RS.GetRows()
Set RS = Nothing
Set RecSet = Conn.Execute("SELECT * FROM Kategori WHERE uid <> '' ORDER BY uid ASC, Namn ASC")
UKat = RecSet.GetRows()
Set RecSet = Nothing
Conn.Close
Set Conn = Nothing%>
<html>
<head>
<title>Dynamiska menyer i javascript</title>
<SCRIPT language="javascript">
function boxData(sText, vValue){
this.text = sText;
this.value = vValue;
}
function underkat(obj, icase){
// alert(icase);
igr = icase;
vgr = eval("vMan" + igr);
if (igr){
obj.length = (vgr.length);
for(n=0;n<vgr.length;n++){
obj.options[n].value = vgr[n].value;
obj.options[n].text = vgr[n].text;
}
obj.selectedIndex = 0
}else{
obj.length = 1;
for(n=0;n<obj.length;n++){
obj.options[n].value = 0;
obj.options[n].text = obj.options[n].text;
}
obj.selectedIndex = 1;
}
}
<%If IsArray(UKat) Then
x = 0
For I = 0 To UBound(UKat,2)
strUID = UKat(1,I)
strName = UKat(2,I)
If strUID <> strLastUID Then
Response.Write "vMan" & strUID & " = new Array();" & vbcrlf
x = 0
End If
Response.Write "vMan" & strUID & "[" & x & "] = new boxData(""" & strName & """,""" & strUID & """);" & vbcrlf
strLastUID = strUID
x = x + 1
Next
End If%>
</SCRIPT>
</head>
<body>
<form name="kat" method="post" action="">
<select name="kat" onChange="underkat(document.kat.typ,this.options[selectedIndex].value);">
<option value="" selected>Välj kategori</option>
<%If IsArray(HKat) Then
For I = 0 TO UBound(HKat,2)
strId = HKat(0,I)
strName = HKat(2,I)%>
<option value="<%=strId%>"><%=strName%></option>
<%Next
End If%>
</select>
<select name="typ">
<option value="" selected>Ingen kategori vald</option>
</select>
</form>
</body>
</html>
cupyMedlem sedan apr. 2002299 inlägg Det finns en bra exempel här
AsaMedlem sedan dec. 20011 860 inlägg Om man utgår ifrån en tabell bara då?
id uid Namn AU
DVD Action 0
DVD Tecknat 0
DVD Komedi 0
VHS Action 0
DVD DVD 3
Motor Motor 0
PC PC 0
VHS VHS 1
id är huvudkat, uid är underkat och AU är antal underkategorier under id
solbulleMedlem sedan mars 20015 287 inlägg På vilket sätt blir det svårt att använda dig av getrows på din sida? Vad använder du den hämtningen från databasen till i övrigt?
Du kan ju lägga data från getrosw-arrayen i variabler om du tycker att det blir lättare att arbeta med det.
AsaMedlem sedan dec. 20011 860 inlägg Detta är koden jag har nu som är för det när man ska använda det jag behöver hjälp med! Jag öppnar databasen längst upp på sidan och denna kodsnutt ligger typ på rad 400. Är inne på en adminsida.
<%If Request.QueryString("action") = "andraart" AND Session("admin") = "ok" Then
Set RecSet = Conn.Execute("Select * From artiklar Where id=" & Request.QueryString("id"))%>
<table width="100%" border="0" align="center">
<form action="admin.asp?do=inne&action=andratart&id=<%=RecSet("id")%>" method="post" name="andraart" onSubmit="return artikelandra()">
<tr>
<td width="165"><b>Huvudkategori: </b><br>
<select name="typ" style="width: 140">
<option value="">-- Välj --
<%Set UIDES = Conn.Execute("SELECT * From kategori Where id <> '' Order By namn")
Do Until UIDES.EOF%>
<option value="<%=UIDES("namn")%>" <%If RecSet("typ") = UIDES("id") Then Response.Write " SELECTED"%>><%=UIDES("namn")%><br>
<%UIDES.MoveNext
Loop%>
</select>
</td>
<td width="235"><b>Underkategori: </b><br>
<select name="kat" style="width: 140">
<option value="">-- Välj --
<%Set RS=Conn.Execute("Select * From kategori Where uid='" & RecSet("typ") & "' Order By namn")
Do Until RS.EOF%>
<option value="<%=RS("namn")%>" <%If RecSet("kat") = RS("namn") Then Response.Write " SELECTED"%>><%=RS("namn")%><br>
<%RS.MoveNext
Loop%>
</select>
</td>
</tr>
<tr>
<td valign="middle" colspan="3"> <b>Artikelnr: </b><br><input type="text" name="artikelnr" size="22" value="<%=RecSet("artikelnr")%>"></td>
</tr>
<tr>
<td><b>Pris: </b><br><input type="text" name="pris" size="10" value="<%=RecSet("pris")%>"></td>
<td><b>Pris exkl: </b><br><input type="text" name="prise" size="10" value="<%=RecSet("prise")%>"></td>
</tr>
<tr>
<td valign="middle" colspan="2"> <b>Bildens sökväg: </b><br><input type="text" name="bild" size="50" value="<%=RecSet("bild")%>"></td>
</tr>
<tr>
<td colspan="2"><b>Artikelrubrik: </b><br><input type="text" name="artikel" size="50" value="<%=RecSet("artikel")%>"></td>
</tr>
<tr>
<td colspan="2"><b>Info om artikeln: </b><br><textarea cols="61" rows="10" name="info"><%=RecSet("info")%></textarea></td>
</tr>
<tr>
<td colspan="2" align="center"><hr width="100%" noshade color="#000000" size="1"></td>
</tr>
<tr>
<td colspan="2"><input type="submit" name="submit" value="Slutför"></td>
</tr>
<tr>
<td colspan="2" align="center"><hr width="100%" noshade color="#000000" size="1"></td>
</tr>
<tr>
<td colspan="2"><a href="javascript:history.back()">Tillbaka</a></td>
</tr>
</form>
</table>
<%End If%>