webForumDet fria alternativet

selecta rätt option efter omladdning av sida

ASP

17 svar · 550 visningar · startad av Calevan

Medlem sedan maj 20031 173 inlägg
Frågan#1

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!

Medlem sedan juni 2004533 inlägg
#2

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.

Medlem sedan okt. 20005 273 inlägg
Medlem sedan maj 20031 173 inlägg
#4

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?)

Medlem sedan juni 2004533 inlägg
#5

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

;)

Medlem sedan maj 20031 173 inlägg
#6

kanon, det kör jag på!

(och väldigt fin liten dikt där sen också!)

Medlem sedan apr. 20003 174 inlägg
#7

Flyttad från HTML, XHTML & CSS.

mvh Palle
Moderator webForum

Medlem sedan juni 2004533 inlägg
#8

Jag tyckte att det passade med lite Fläskkvartett. :)

Medlem sedan apr. 20003 174 inlägg
#9

..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]
Medlem sedan maj 20031 173 inlägg
#10

tack för flytten palle!

och tack för dit svar, ser tjusigt ut!

Medlem sedan juni 2004533 inlägg
#11

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
Medlem sedan maj 20031 173 inlägg
#12

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

Medlem sedan juni 200032 967 inlägg
#13

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

Medlem sedan juni 2004533 inlägg
#14

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

Medlem sedan juni 200032 967 inlägg
#15

Hmm.

Ok, där fick jag lära mig ett och annat. Tack för det! :)

Medlem sedan juli 2002202 inlägg
#16

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..... :)

Medlem sedan juni 200032 967 inlägg
#17

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
Medlem sedan juli 2002202 inlägg
#18

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

280 ms totalt · 4 externa anrop · v20260731065814-full.a51de22e
133 ms — deklarationer (db)
0 ms — hämta statistik (cache)
142 ms — hämta tråd, inlägg och bilagor (db)
129 ms — ändringar (db)