Hittat en kod för att lista värden i två selectlister.
Undrar hur man sätter värdena som selected när man öppnar sidan.
Alltså om en viss post skall vara markerad som default.
<%
Option Explicit
Response.Buffer = True
Dim objConn, objRS
Dim strConnString, strSQL, strLink, strSubLink
Dim arrLinks
Dim N, intLinkID, intSubLinkID, intLastLinkID, i
strConnString = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & server.MapPath("/poplistbox/links.mdb")
'## -- sql-query to get all links from database --
strSQL = "SELECT hl.Link_Name, sl.Sublink_SublinkID, sl.Sublink_LinkID, sl.Sublink_Name " & _
"FROM Links hl, Sublinks sl " & _
"WHERE hl.Link_LinkID = sl.Sublink_LinkID " & _
"ORDER BY hl.Link_LinkID ASC, sl.Sublink_Name ASC"
Set objConn = Server.CreateObject("ADODB.Connection")
objConn.Open strConnString
Set objRS = objConn.Execute(strSQL)
If Not objRS.EOF Then
'## -- get all links --
arrLinks = objRS.GetRows()
End If
Set objRS = Nothing
objConn.Close
Set objConn = Nothing
%>
<HTML>
<HEAD>
<TITLE>Popuplate Listbox with Javascript and ASP</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;
}
<%
'## -- make arrlinks array to create javascript arrays to populate the second listbox --
If IsArray(arrLinks) Then
i = 0
For N = 0 TO UBound(arrLinks,2)
strLink = arrLinks(0,N)
intSubLinkID = arrLinks(1,N)
intLinkID = arrLinks(2,N)
strSubLink = arrLinks(3,N)
'## -- print out javascript code to create a new javascript array --
If intLinkID <> intLastLinkID Then
Response.Write vbcrlf & "var link" & intLinkID & " = new Array();" & vbcrlf
i = 0
End If
'## -- print out javascript code to add new values to the javascript array --
'## -- boxData(listboxtext, listboxvalue.
'## -- change the asp-variables to suit your needs in text and values --
Response.Write "link" & intLinkID & "[" & i & "] = new boxData(""" & strSubLink & """," & intSubLinkID & ");" & vbcrlf
intLastLinkID = intLinkID
i = i + 1
Next
End If
%>
function populateBox(obj, icase, arr){
// alert(icase);
var vgr = eval (arr);
if (vgr.length > 0){
obj.length = (vgr.length + 1);
obj.options[0].value = '';
obj.options[0].text = 'Select subcategory';
for(n=0;n<vgr.length;n++){
obj.options[n+1].value = vgr[n].value;
obj.options[n+1].text = vgr[n].text;
}
}else{
obj.length = 1;
for(n=0;n<obj.length;n++){
obj.options[n].value = 0;
obj.options[n].text = 'N/A';
}
}
}
</SCRIPT>
</HEAD>
<BODY bgcolor="#FFFFFF" text="#000000">
<FORM name="form1" method="post" action="">
<%
If IsArray(arrLinks) Then
intLastLinkID = ""
%>
<SELECT name="select" onChange="populateBox(document.form1.select2,this.options.length,value);">
<OPTION value="0">Select Category</OPTION>
<%
For N = 0 TO UBound(arrLinks,2)
strLink = arrLinks(0,N)
intLinkID = arrLinks(2,N)
If intLinkID <> intLastLinkID Then
%>
<OPTION value="link<% =intLinkID%>"><% =strLink%></OPTION>
<%
End If
intLastLinkID = intLinkID
Next
%>
</SELECT>
<SELECT name="select2">
<OPTION>N/A</OPTION>
</SELECT>
<%
End If
%>
</FORM>
</BODY>
</HTML>
Ja, nästan.
Värdet i den andra selecten vill jag också ha som default, det verkar ju vara marigare. Med bodytaggen så hamnar jag visserligen i rätt "kategori", men inte rätt "post".
Sist i onLoad lägger du till document.form1.select2.selectedIndex=i där i är indexet på det val som skall vara markerat (0 och uppåt). Sedan är ju frågan vilket val som skall vara markerat.
Måste erkänna att här är en forma av korspostning, men ganska oskyldig.
Men det jag vill göra är att plocka ut det splittade värdet och trixa dit det så att värdet till höger om separatorn blir värdet i value må någe vis.
Jag har testat med det också, verkar inte gör ngn skillnad. Problemet är (tror jag) att <SELECT name="select2">
inte har något värde. Utan att värderna ligger i arrayen:
link3[3] = new boxData("Ägg",11|5.4);
????????????????????
Jag kan ju splitta med asp också med jag behöver båda värderna, 11 som ett id och 5.4(i detta fall) som ett referensvärde.
262 ms totalt · 4 externa anrop · v20260731065814-full.e96017d9