2010-07-19 38 views

回答

12
var params = [ 
    "foo=bar", 
    "base=ball" 
]; 

window.location.href = 
    "http://" + 
    window.location.host + 
    window.location.pathname + 
    '?' + params.join('&'); 

您的change事件處理程序中的代碼將執行此操作。

例如:

$('#my_dropdown_id').bind('change', function(){ 
    var params = [ 
     "foo=bar", 
     "base=" + $(this).val() 
    ]; 

    window.location.href = "http://" + window.location.host + window.location.pathname + '?' + params.join('&'); 
}); 
+0

如果你匆忙,不介意可能重複自己,'window.location.href + =「&foo = bar&base = ball」'可以在一個捏。 – rymo 2012-06-01 05:42:58

+0

請注意下面的答案(http://stackoverflow.com/a/16553500/190599)關於不直接指定http。 – CodeReaper 2015-02-02 09:38:24

29

這是一個老問題,但它在谷歌搜索結果中第一個走了過來。

我去的解決方案與jAndy的相似。

window.location.pathname給我的網頁沒有查詢字符串的網址。 然後,我可以用"?"+$.param({'foo':'bar','base':'ball'})構建查詢字符串,然後將其附加到路徑名並設置爲window.location.href

window.location.href = window.location.pathname+"?"+$.param({'foo':'bar','base':'ball'}) 
+2

嗨jgreen,歡迎來到Stack Overflow。感謝您分享您的解決方案作爲另一個答案。提供一個老問題的詳細答案,肯定會對未來的訪問者有所幫助。 +1 – jmort253 2012-11-03 00:11:52

11

如果用最精彩的答案去,你可能要與

window.location.protocol 

更換

http:// 

的代碼,以便它適用於其他協議,如HTTPS或文件。所以

window.location.href = window.location.protocol + "//" + window.location.host + window.location.pathname + '?' + params.join('&'); 
+0

您可能需要將其移動到最受好評的答案下進行評論 – zimmryan 2013-05-14 22:17:30

+0

缺少聲望以在其中添加評論我相信 – broetchen 2013-05-15 14:41:36

0

如果你有一個現有的查詢字符串,你想保持那麼這個版本確實是,並增加了新的PARAMS任何現有的。密鑰被轉換爲小寫字母,因此不會添加重複項。維護quersytring確實使解決方案更加複雜,所以我只會在需要時執行此操作。

$("#sortby").change(function() { 

    var queryString = getQueryStrings(); 
    // Add new params to the querystring dictionary 
    queryString["sortby"] = $("#sortby").val(); 

    window.location.href = 
     window.location.protocol + "//" + 
     window.location.host + 
     window.location.pathname + 
     createQueryString(queryString); 
}); 


// http://stackoverflow.com/questions/2907482 
// Gets Querystring from window.location and converts all keys to lowercase 
function getQueryStrings() { 
    var assoc = {}; 
    var decode = function (s) { return decodeURIComponent(s.replace(/\+/g, " ")); }; 
    var queryString = location.search.substring(1); 
    var keyValues = queryString.split('&'); 

    for (var i in keyValues) { 
     var key = keyValues[i].split('='); 
     if (key.length > 1) { 
      assoc[decode(key[0]).toLowerCase()] = decode(key[1]); 
     } 
    } 

    return assoc; 
} 

function createQueryString(queryDict) { 
    var queryStringBits = []; 
    for (var key in queryDict) { 
     if (queryDict.hasOwnProperty(key)) { 
      queryStringBits.push(key + "=" + queryDict[key]); 
     } 
    } 
    return queryStringBits.length > 0 
     ? "?" + queryStringBits.join("&") 
     : ""; 
} 
3

如果你想有一個非常簡單的方法來保存查詢字符串,並可能追加到它,使用window.location.search;這裏有一個片段:

var search = window.location.search + (window.location.search ? "&" : "?"); 
       search += "param1=foo&param2=bar"; 
       window.location.href = window.location.protocol + "//" + window.location.host + window.location.pathname + search; 

你可以,當然,使用建立查詢字符串的剩餘部分,如其他例子中的一個更復雜的方式,但關鍵是要充分利用Location.search

相關問題