webForumDet fria alternativet

Sätta värde som "selected"?

9 svar · 272 visningar · startad av Jesper T

Jesper TMedlem sedan nov. 20017 144 inlägg
#1

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>
JojoxxMedlem sedan juni 20004 308 inlägg
#2

Denna rad genererar (i en loop) alla värdena i den första listan;

<OPTION value="link<% =intLinkID%>"><% =strLink%></OPTION>

Ändrar du den till;

<OPTION <%=thisSelected%> value="link<% =intLinkID%>"><% =strLink%></OPTION>

Så kan du genom att sätta ASP-variabeln thisSelected till "selected" göra aktuell post i listan förvald.

För att sedan synka den andra listan med valet i den första lägger du till detta i <body>;

onLoad="populateBox(document.form1.select2,document.form1.select.options.length,document.form1.select[document.form1.select.selectedIndex].value);"

Jesper TMedlem sedan nov. 20017 144 inlägg
#3

Tack för hjälpen, jag skall titta på´t.

Jesper TMedlem sedan nov. 20017 144 inlägg
#4

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".

Jesper TMedlem sedan nov. 20017 144 inlägg
#5

Det kanske är lättare med html-koden:

<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;
}

var link1 = new Array();
link1[0] = new boxData("Banan",3);
link1[1] = new boxData("Körsbär",4);
link1[2] = new boxData("Päron",2);
link1[3] = new boxData("Äpple",1);

var link2 = new Array();
link2[0] = new boxData("Lamm",6);
link2[1] = new boxData("Lax",7);
link2[2] = new boxData("Stek",5);

var link3 = new Array();
link3[0] = new boxData("Gädde",9);
link3[1] = new boxData("Mjölk",8);
link3[2] = new boxData("Ost",10);
link3[3] = new boxData("Ägg",11);

var link4 = new Array();
link4[0] = new boxData("Durumvete",14);
link4[1] = new boxData("Grahamsmjöl",15);
link4[2] = new boxData("Spagetti",13);
link4[3] = new boxData("Vetemjöl",12);

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" onLoad="populateBox(document.form1.select2,document.form1.select.options.length,document.form1.select[document.form1.select.selectedIndex].value);">
<FORM name="form1" method="post" action="">

  <SELECT name="select" onChange="populateBox(document.form1.select2,this.options.length,value);">
		<OPTION value="0">Select Category</OPTION>
<OPTION  value="link1">Frukter & Grönt</OPTION><OPTION  value="link2">Kött & Fisk</OPTION><OPTION selected value="link3">Mjölk & Ägg</OPTION><OPTION  value="link4">Pasta & Mjöl</OPTION>
  </SELECT>
  <SELECT name="select2">
    <OPTION>N/A</OPTION>
  </SELECT>

</FORM>
</BODY>
</HTML>
JojoxxMedlem sedan juni 20004 308 inlägg
#6

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.

Jesper TMedlem sedan nov. 20017 144 inlägg
#7

Tack, det var ju en baggis! (Med hjälp ifrån dig!)

Jesper TMedlem sedan nov. 20017 144 inlägg
#8

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.

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++){
        [b]obj.options[n+1].value = vgr[n].value;[/b][blue]//[1].split("|");[/blue]
	obj.options[n+1].text = vgr[n].text;
	}

Se tidigare länk om det är lite olkart:
http://www.webforum.nu/showthread.php?s=&goto=lastpost&threadid=60345

solbulleMedlem sedan mars 20015 287 inlägg
#9

Egentligen kanske svar på din andra tråd, men hur som helst, NaN står väl för "Not A Number"

kan du inte köra parseInt(variabeln) för att vara säker på att det är ett tal du bollar med.

Jesper TMedlem sedan nov. 20017 144 inlägg
#10

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.

136 ms totalt · 3 externa anrop · v20260731065814-full.beb2e261
0 ms — hämta forumlista (cache)
0 ms — hämta statistik (cache)
133 ms — hämta tråd, inlägg och bilagor (db)