Något smidigare sätt än asp-kod finns inte.
Ifall formuläret postas med method="get" så kan du plocka upp värdet ifrån querystring med javascript och använda det för att välja rätt option, men det blir ju knappast smidigare.
17 svar · 550 visningar · startad av Calevan
Har en select-grej i ett formulär enligt nedan:
<select size="1" name="ar">
<option selected>Alla år</option>
<option>2003</option>
<option>2004</option>
<option>2005</option>
</select>
formuläret skickar besökaren till samma sida och det värde man valt används för att filtrera vilka år man ska få se. Men nu är det så att jag gärna vill att "selected" ska flyttas från "Alla år" till just det år man valt när man valt att filtrera. Hur kan jag göra detta? Går det på något smidigt sätt eller krävs asp kod?
tack!
Något smidigare sätt än asp-kod finns inte.
Ifall formuläret postas med method="get" så kan du plocka upp värdet ifrån querystring med javascript och använda det för att välja rätt option, men det blir ju knappast smidigare.
tack!
så, svaret var så som jag trodde... man får göra en if-sats för varje val. om någon kommer på något smidigare sätt (jag vet inte alls hur) vore det väldans trevligt!
<%
strS = Request.Form("select")
%>
<form method="post">
<select name="select">
<option<%If strS = "Bil" Then Response.Write " Selected"%>>Bil</option>
<option<%If strS = "Båt" Then Response.Write " Selected"%>>Båt</option>
<option<%If strS = "Flyg" Then Response.Write " Selected"%>>Flyg</option>
</select>
<input type="submit" name="B1">
</form>
(flyttas till ASP?)
Du kan ju loopa ut värdena:
<%
strS = Request.Form("select")
astrItems = Array("Tåg", "Flyg", "Båt")
%>
<form method="post">
<select name="select">
<%
For lngItem = 0 to UBound(astrItems)
%><option<%If strS = astrItems(lngItem) Then Response.Write " Selected"%>><%=astrItems(lngItem)%></option><%
Next
%>
</select>
<input type="submit" name="B1">
</form>
"Tåg och flyg och båt
det bär iväg
en liten tripp till Rom och Paris
för vem som helst
men jag fick nej
med tåg och med flyg och båt
du kom så långt
så långt från mig"...
;)
Jag tyckte att det passade med lite Fläskkvartett. :)
..eller så skapar du en liten asp-funktion som du lätt kan återanvända, ex.
[red]Function IsSelected(value, refvalue)
value = LCase(trim(value))
refvalue = LCase(trim(refvalue))
If IsNumeric(value) AND IsNumeric(refvalue) Then
value = Int(value)
refvalue = Int(refvalue)
End If
If value = refvalue Then IsSelected = " selected=""selected"""
End Function
...
<% strArValue = Request.Form("ar") %>
<select size="1" name="ar">
<option selected>Alla år</option>
<option<%= IsSelected("2003",strArValue) %>>2003</option>
<option<%= IsSelected("2004",strArValue) %>>2004</option>
<option<%= IsSelected("2005",strArValue) %>>2005</option>
</select>[/red]
Får jag komma med lite korrigeringar...
Om du ändrar värdet på parametrar i funktionen så bör du deklarera dem som ByVal, annars kommer du att ändra värdet som du skickar in i funktionen.
Funktionen Int() gör ingen typkonvertering. Om du vill konvertera värdet bör du använda någon funktion som gör det. (Ifall du använder Int() så kommer värdet visserligen att konverteras till Double, men bara som en bieffekt eftersom Int() inte accepterar en sträng.)
Funktionen bör returnera något även när värdena inte är lika.
Function IsSelected(ByVal value, ByVal refvalue)
value = LCase(Trim(value))
refvalue = LCase(Trim(refvalue))
If IsNumeric(value) AND IsNumeric(refvalue) Then
value = CLng(value)
refvalue = CLng(refvalue)
End If
If value = refvalue Then
IsSelected = " selected=""selected"""
Else
IsSelected = ""
End If
End Function
tack! det fungerar fint!
nu ska jag trimma det hela så åren som man kan välja på hämtas ur en tabell i databasen...
Guffa skrev:
Om du ändrar värdet på parametrar i funktionen så bör du deklarera dem som ByVal, annars kommer du att ändra värdet som du skickar in i funktionen.
Nja, det där stämmer inte helt. I Visual Basic är det så, att ByRef är default. I VBScript, däremot, är det ByVal som antas så länge man inte anger ByRef.
Mvh
@nders skrev:
Guffa skrev:
Om du ändrar värdet på parametrar i funktionen så bör du deklarera dem som ByVal, annars kommer du att ändra värdet som du skickar in i funktionen.
Nja, det där stämmer inte helt. I Visual Basic är det så, att ByRef är default. I VBScript, däremot, är det ByVal som antas så länge man inte anger ByRef.
Ett enkelt test visar att du har fel:
<%
Function Test(strText)
strText = "beta"
End Function
Dim strMessage
strMessage = "alfa"
Call Test(strMessage)
Response.Write strMessage
%>
Koden skriver ut "beta".
okej, men nu har jag ett liknande problem som jag egentligen inte tycker borde vara ett problem!
jag loopar igenom några options:
<option [B]<%=rs("id")%> = <%=request.querystring("id")%>[/B]
[B]<% if rs("id") = request.querystring("id") then %> selected<% end if %>[/B]
value="page.asp?p=contactform&id=<%=rs("id")%>&email=<%=rs("email")%>">__ decensy_<%=rs("nick")%></option>
detta får jag ut (så man börjar fundera lite på if-satsen):
<option 3 = 7 value="page.asp?p=contactform&id=3">trala1</option>
<option 2 = 7 value="page.asp?p=contactform&id=2">trala2</option>
<option 7 = 7 value="page.asp?p=contactform&id=7">trala3</option>
som ni kan se så fattas (enligt mig) "selected" i det sista option:et.. eller kan man inte använda querystrings i if-satser?!?!?!??!!!??! det är säkert någon liten skitsak, men just nu verkar det hopplöst..... :)
Klart man kan använda querystrings i if-satser, men man måste alltid se till att det man jämför är av samma typ.
if clng(rs("id")) = clng(request.querystring("id")) then
tack så mycket.. :)
enligt mig, som dock är aningens nybörjare på
detta så borde första modellen fungerat.. men de
verkar ju ganska logiskt att man måste ha 2 av samma
typ för att få det att fungera..
tack för svaret @nders ;)