使用javascript将用户重定向到当前页面并使用一些查询字符串

时间:2009-08-21 00:02:30

标签: javascript jquery

当某人点击某个链接时,我想这样做:

  1. 从文本框中抓取文字
  2. 编码文字
  3. 重定向到currentpage.aspx?search = textboxvalue
  4. 到目前为止,我有这个但是没有用:

    window.location.href = "?search=" + escape( $("#someId").val());
    

10 个答案:

答案 0 :(得分:23)

我需要做一些类似于你想要的事情,所以我把一个允许你做的功能放在一起。我希望它有用。我已经对它进行了相当广泛的测试,没有发现任何问题,如果发现任何问题,请随时告诉我。

功能

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

如何使用

该函数接受一个对象文字作为其唯一参数。对象文字应包含要重新加载页面的查询字符串变量。它会考虑现有变量,如果您在传递的对象文字中指定现有变量,它将覆盖现有变量。

所以,假设我们的位置为http://localhost/helloworld.php,我想重定向到当前页面,其中查询字符串变量foo的值应为bar,我会调用该函数如下:

reloadWithQueryStringVars({"foo": "bar"});

浏览器将导航至http://localhost/helloworld.php?foo=bar。如果我通过以下功能:

reloadWithQueryStringVars({"foo": "bar2"});

浏览器将导航至http://localhost/helloworld.php?foo=bar2

当函数接受对象文字时,您可以将多个属性传递给函数以获取多个查询字符串变量。如果我仍在http://localhost/helloworld.php?foo=bar2,我将函数调用如下

reloadWithQueryStringVars({"foo": "bar3", "answer": "42", "bacon": "tasty"});

浏览器将导航至http://localhost/helloworld.php?foo=bar3&answer=42&bacon=tasty

您的用例

然而,在回答这个问题时,你可以按如下方式调用该函数:

reloadWithQueryStringVars({"search": escape( $("#someId").val() )});

答案 1 :(得分:8)

window.location.href = window.location.href + "?search=" + escape( $("#someId").val());

答案 2 :(得分:5)

怎么样:

window.location = "/currentpage.aspx?search=" + escape( $("#someId").val());

window.location = window.location.pathname + "?search=" + escape( $("#someId").val());

等等...

答案 3 :(得分:1)

您需要添加实际的基本网址

window.location.href = window.location.href + "?search=" + escape( $("#someId").val());

答案 4 :(得分:1)

 $(document).ready(function(){
     $('a').click(function(e){

         window.location = "?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;
     });                                                                   

});

答案 5 :(得分:1)

window.location.href添加内容的问题是,如果您已经这样做了?您只需多次追加"?search=..."即可。更重要的是,它比它需要的更复杂。

你已经在使用jQuery了。为什么不这样做?

<form id="search" method="get">
<input type="text" name="search">
</form>
<a href="#" id="go">Search</a>

使用:

$(function() {
  $("#go").click(function() {
    $("#search").submit();
    return false;
  });
});

然后您不必担心正确的URL,编码等。

答案 6 :(得分:1)

如果您只想更改搜索字符串,则表示您正在更改错误的位置属性。我想你想这样做:

location.search = "?search=" + encodeURIComponent( $("#someId").val());

答案 7 :(得分:0)

哪部分不起作用?

尝试使用encodeURI()而不是escape()。

答案 8 :(得分:0)

$("a").click(function() {

 document.location.href += "?search=" + encodeURIComponent($("#myTextBox").val());


});

答案 9 :(得分:0)

    function Redirect()
      {
    window.location.href = "URL_TO_BE_Redircted";
      }

然后按钮(asp.net)

    <asp:Button runat="server" id="btnRedirect" onClientClick="Redirect();return false;"/>

所以点击按钮后控件将进入服务器端,然后可以访问你形成的查询字符串!