Leiten Sie den Benutzer mit einer Abfragezeichenfolge unter Verwendung von Javascript auf die aktuelle Seite um

Lesezeit: 4 Minuten

Benutzer-Avatar
mrbla

Wenn eine Person auf einen Link klickt, möchte ich Folgendes tun:

  1. Holen Sie sich den Text aus einem Textfeld
  2. den Text kodieren
  3. 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 barwü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() )});

  • Wenn der Parameter bereits in der Abfragezeichenfolge vorhanden ist, wird sein Wert aktualisiert, tolle Arbeit!

    – jdecuyper

    22. Mai 2012 um 16:09 Uhr

  • newQueryVars wird jedoch immer wahr sein, sodass die letzte if-Anweisung nicht wie beabsichtigt funktioniert.

    – bvx89

    23. März 2018 um 10:00 Uhr

window.location.href = window.location.href + "https://stackoverflow.com/questions/1309483/?search=" + escape( $("#someId").val()); ?

  • Wenn die URL bereits eine Abfragezeichenfolge hat, wird diese nicht hinzugefügt, anstatt sie zu ersetzen? Sie erhalten am Ende mehrere ?Suchsegmente.

    – great_lama

    21. August 2009 um 0:27 Uhr

  • @great_llama ist richtig. Anstelle von window.location.href können Sie window.location.pathname verwenden. Es gibt Ihnen die URL ohne Abfragezeichenfolge.

    – Ruchira

    14. April 2016 um 22:42 Uhr

Benutzer-Avatar
Kenny

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

Benutzer-Avatar
Joel

Sie müssen die eigentliche Basis-URL voranstellen

window.location.href = window.location.href + "https://stackoverflow.com/questions/1309483/?search=" + escape( $("#someId").val());

Benutzer-Avatar
rahul

 $(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;
     });                                                                   

});

1054760cookie-checkLeiten Sie den Benutzer mit einer Abfragezeichenfolge unter Verwendung von Javascript auf die aktuelle Seite um

This website is using cookies to improve the user-friendliness. You agree by using the website further.

Privacy policy