webForumDet fria alternativet

Asp & javascript!

15 svar · 420 visningar · startad av Asa

AsaMedlem sedan dec. 20011 860 inlägg
#1

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
AsaMedlem sedan dec. 20011 860 inlägg
#3

Fattar noll!

solbulleMedlem sedan mars 20015 287 inlägg
#4

Hur många huvudkategorier har du? Samt ungefär hur många underkategorier per huvudkategori?

AsaMedlem sedan dec. 20011 860 inlägg
#5

Det är olika! Man lägger till dem till databasen så det varierar!

PatrikBMedlem sedan mars 20002 836 inlägg
#6

Hur ser dina tabeller ut i databasen?
Tabellnamn
- falt1
- falt2
etc.

cya,
PatrikB

AsaMedlem sedan dec. 20011 860 inlägg
#7

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
#8

Är det endast en tabell du jobbar mot??
Vad heter tabellen?

cya,
PatrikB

PatrikBMedlem sedan mars 20002 836 inlägg
#9

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
#10

En tabell med namn kategorier!

AsaMedlem sedan dec. 20011 860 inlägg
#11

Tackar för det! Funkar fint förrutom det du sa om javascriptet!

AsaMedlem sedan dec. 20011 860 inlägg
#12

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
#13

Det finns en bra exempel här

AsaMedlem sedan dec. 20011 860 inlägg
#14

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
#15

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
#16

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%>
137 ms totalt · 3 externa anrop · v20260731065814-full.30151723
0 ms — hämta forumlista (cache)
0 ms — hämta statistik (cache)
134 ms — hämta tråd, inlägg och bilagor (db)