webForumDet fria alternativet

Parameter till funktion

6 svar · 278 visningar · startad av Jaar

JaarMedlem sedan juli 2001434 inlägg
#1

Jag försöker skicka en parameter till en funktion, och den parametern innehåller ett + tecken

<a href="javascript: searchTrip('12345+67890')">

Strängen genereras från en JSP sida (mindre viktigt) och för att det inte ska bli ett ' ' så trodde jag var tvungen att översätta det
kör en URLkodare (som tar bort konstinga tecken) .. .tror + blir %2 bl.a.

<a href="javascript: searchTrip('12345%267890')">

Detta är ju bra. Men webläsaren (IE, inte NS) översätter ju %2 när han skickar det till funktionen, så tas det emot som ett plus igen...

function searchTrip(rowid)
{
  eval("document.location='nextStep.jsp?searchrow="+rowid+"'");
}

Det betyder att när jag skickar användaren till nextStep.jsp så kommer searchrow=12345 67890, alltså ett mellanrum (+ i URLen blir ju det), och jag kommer få fel.

Om jag gör en IE specifik grej

<td onclick="searchTrip('12345%267890')">tryck här</td>

Så kommer det fungera helt perfekt. Hur rättar jag till denna "bugg" så att länken inte blir med mellanslag?

JojoxxMedlem sedan juni 20004 308 inlägg
#2

Du behöver bara escape'a data som skall skickas via url'en (GET), ex;

location.href="nextStep.jsp?searchrow="+escape(rowid);

Om du från JSP-sidan genererar ett "+"-tecken så är det inga problem för JavaScript;

alert("1+2=3");

Kan alltså outputen från jsp-sidan vara, och det kommer att fungera. Det du får tänka på är att ersätta sträng-terminering och ev. radbrytningar;

alert("Mitt namn är Karl \"Kalle\" Karlsson\nMin titel är murare");

JaarMedlem sedan juli 2001434 inlägg
#3

Jag tycker inte det verkar fungera...
Här kommer en testkod.

Filen test.asp

<html>
<head>
<title>Testar</title>
<script language="JavaScript">
function test2(text)
{
  location.href = 'test.asp?text=' + escape(text);

}

function test(text)
{
  counter = "";
  for(i=0; i < text.length; i++)
  {
    if(text.charAt(i) == '+')
    {
      counter = counter + "%2B";   
    }
    else 
      counter = counter + text.charAt(i);
  }
  alert(counter);
  location.assign('test.asp?text='+text);
}
</script>
</head>
<body>
<%=request("text")%><br>
<a href="javascript: test2('12345%2B67890')">testar</a>
</body>
</html>

Funktionen test gör det jag vill ska göras (och jag använder den temporärt), men jag vill att det ska skickas som %2B...
Trycker man på länken vill jag alltså att det ska stå test.asp?test=12345%2B67890

Det är det som kommer från JSP scriptet och det är så jag vill skicka det, men IE gör om det så att ett + tecken skickas in...

JojoxxMedlem sedan juni 20004 308 inlägg
#4

Vill du att adress-raden skall lyda "test.asp?test=12345%2B67890" skall du inte använda escape. Vill du att svaret från <%=request("text")%> skall lyda "12345%2B67890" skall du använda escape. "%2B" är nämligen "+" när du använder GET, "+" å andra sidan är mellanslag. Logiskt va? :)

JaarMedlem sedan juli 2001434 inlägg
#5

Detta har jag förstått (det med plus o mellanslag)

Det jag inte förstår är hur jag får följande kod att skicka iväg användaren till sidan "test.asp?test=12345%2B67890"

Filen test.asp

<%
myValue = "12345%2B67890"
%>
<html>
<head>
<title>Testar</title>
<script language="JavaScript">
function test(text)
{
  location.href = 'test.asp?text=' + text;
}
</script>
</head>
<body>
<%=request("text")%><br>
<a href="java script: test('<%=myValue%>')">testar</a>
</body>
</html>

Denna kod för att göra det "övertydligt"...
Jag har ett värde med ett plustecken (+) i variabeln myValue, och jag vill att efter man tryckt på länken, ska hamna på sidan test.asp och variabeln test ska skrivas ut som "12345+67890"

Peter SMedlem sedan dec. 20025 483 inlägg
#6

Om jag har förstått dig rätt, skulle du kunna göra så här:

...
location.href = 'test.asp?text=' + text.replace(/[+]/g, "%2B");
...

:)

JaarMedlem sedan juli 2001434 inlägg
#7

Jupp, det var en kortare variant av vad jag själv kom fram till (se mitt andra inlägg och funktionen test() )
Det verkar som om detta är det enda sättet att göra det på. Tycker det är konstigt eftersom det inte är några som helst problem i NS 4.x att göra det.

Tack så mycket för den hjälp jag fått..

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