Wenn eine Person auf einen Link klickt, möchte ich Folgendes tun:
- Holen Sie sich den Text aus einem Textfeld
- den Text kodieren
- Umleitung zu currentpage.aspx?search=textboxvalue
Ich habe das bisher, aber es funktioniert nicht:
window.location.href = "https://stackoverflow.com/questions/1309483/?search=" + escape( $("#someId").val());
Ich musste etwas Ähnliches tun, wie Sie es wollten, also habe ich eine Funktion zusammengestellt, mit der Sie dies tun können. Ich hoffe, es wird nützlich gefunden. Ich habe es ziemlich ausgiebig getestet und keine Probleme gefunden, bitte zögern Sie nicht, mich zu informieren, wenn irgendwelche Probleme gefunden werden.
Die Funktion
function reloadWithQueryStringVars (queryStringVars) {
var existingQueryVars = location.search ? location.search.substring(1).split("&") : [],
currentUrl = location.search ? location.href.replace(location.search,"") : location.href,
newQueryVars = {},
newUrl = currentUrl + "?";
if(existingQueryVars.length > 0) {
for (var i = 0; i < existingQueryVars.length; i++) {
var pair = existingQueryVars[i].split("=");
newQueryVars[pair[0]] = pair[1];
}
}
if(queryStringVars) {
for (var queryStringVar in queryStringVars) {
newQueryVars[queryStringVar] = queryStringVars[queryStringVar];
}
}
if(newQueryVars) {
for (var newQueryVar in newQueryVars) {
newUrl += newQueryVar + "=" + newQueryVars[newQueryVar] + "&";
}
newUrl = newUrl.substring(0, newUrl.length-1);
window.location.href = newUrl;
} else {
window.location.href = location.href;
}
}
Wie man es benutzt
Die Funktion akzeptiert ein Objektliteral als einziges Argument. Das Objektliteral sollte die Abfragezeichenfolgenvariablen enthalten, mit denen Sie die Seite neu laden möchten. Es berücksichtigt vorhandene Variablen und überschreibt eine vorhandene, wenn Sie sie in dem von Ihnen übergebenen Objektliteral angeben.
Nehmen wir also an, unser Standort ist http://localhost/helloworld.php
und ich möchte mit einer Query-String-Variablen auf die aktuelle Seite umleiten foo
dessen Wert sein sollte bar
würde ich die Funktion wie folgt aufrufen:
reloadWithQueryStringVars({"foo": "bar"});
Der Browser navigiert zu http://localhost/helloworld.php?foo=bar
. Und wenn ich die Funktion folgendes übergebe:
reloadWithQueryStringVars({"foo": "bar2"});
Der Browser navigiert zu http://localhost/helloworld.php?foo=bar2
.
Da die Funktion ein Objektliteral akzeptiert, können Sie mehrere Eigenschaften für mehrere Abfragezeichenfolgen-Variablen an die Funktion übergeben. Wenn ich noch dabei bin http://localhost/helloworld.php?foo=bar2
und ich rufe die Funktion wie folgt auf
reloadWithQueryStringVars({"foo": "bar3", "answer": "42", "bacon": "tasty"});
Der Browser navigiert zu http://localhost/helloworld.php?foo=bar3&answer=42&bacon=tasty
Ihr Anwendungsfall
Als Antwort auf die Frage würden Sie die Funktion jedoch wie folgt aufrufen:
reloadWithQueryStringVars({"search": escape( $("#someId").val() )});
window.location.href = window.location.href + "https://stackoverflow.com/questions/1309483/?search=" + escape( $("#someId").val());
?
Wie wäre es mit:
window.location = "/currentpage.aspx?search=" + escape( $("#someId").val());
oder
window.location = window.location.pathname + "https://stackoverflow.com/questions/1309483/?search=" + escape( $("#someId").val());
Etc…
Das Problem mit dem Anhängen von etwas an window.location.href
Was ist, wenn Sie das bereits getan haben? Sie werden einfach weiter anhängen "?search=..."
mehrmals. Noch wichtiger ist, dass es komplizierter ist, als es sein muss.
Sie verwenden bereits jQuery. Warum nicht einfach so?
<form id="search" method="get">
<input type="text" name="search">
</form>
<a href="#" id="go">Search</a>
mit:
$(function() {
$("#go").click(function() {
$("#search").submit();
return false;
});
});
und dann müssen Sie sich keine Gedanken über die richtige URL, Codierung usw. machen.
Sie ändern die falsche Ortseigenschaft, wenn Sie nur die Suchzeichenfolge ändern möchten. Ich denke, Sie möchten dies tun:
location.search = "https://stackoverflow.com/questions/1309483/?search=" + encodeURIComponent( $("#someId").val());
Sie müssen die eigentliche Basis-URL voranstellen
window.location.href = window.location.href + "https://stackoverflow.com/questions/1309483/?search=" + escape( $("#someId").val());
$(document).ready(function(){
$('a').click(function(e){
window.location = "https://stackoverflow.com/questions/1309483/?search=" + encodeURIComponent($("#someId").val());
//this line of code is intended for older ie and might work,
//because I don't remember it exactly
e.stopPropagation();
return false;
});
});