2012-05-18 93 views
0

我試圖讓一個腳本在window.location.hash中使用多個值,但我遇到了jquery的$ .extend()函數的問題

我試過兩種方法,但都沒有解決。

var MultiHash = { 
    params: {}, 

    getHash: function() { 
     var hashString = document.location.hash.replace('#', '').split('&'); 

     for (var i=0; i < hashString.length; i++) { 
      var key = hashString[i].split('=')[0]; 
      var value = decodeURIComponent(hashString[i].split('=')[1]); 

      // First way 
      var a = {key: value}; 

      // Second way 
      var a = {}; 
      a[key] = value; 

      $.extend(params, a); 
     } 

     return params; 
    }, 

    ... 
} 

有人看到這個問題嗎?

+0

你能使用的console.log()來看看你的變量** a **包含了什麼?並將{.extend(params,a)放在{}循環的外部 –

+1

請注意,您還需要在鍵上運行'decodeURIComponent'。 –

回答

3

首先你應該寫:

$.extend(this.params, a); or you cant access param 

可能還有其他的問題。

編輯

它讓你在我看來返回的,而不是this.params感。

$.extend(a,this.params); 

return a 
3

有兩個問題你想做什麼錯了。其中的第一個作爲引用問題,因爲該對象的params變量應引用爲this.params。第二個問題是你沒有保存對象擴展的結果。

$.extend(params, a); 

它應該閱讀這樣的事情,而不是:所有這一切都在下面的行發生

this.params = $.extend(this.params, a); 
0

試試這個:

var MultiHash = { 
    params: {}, 

    getHash: function() { 
     var hashString = document.location.hash.replace('#', '').split('&'); 

     var a = []; 
     for (var i=0; i < hashString.length; i++) { 
      var key = hashString[i].split('=')[0]; 
      var value = decodeURIComponent(hashString[i].split('=')[1]); 
      a.push(key + ":'" + value + "'");   
     } 

     $.extend(this.params,(new Function("return {" + a.Join(",") + "}"))()); 

     return this.params; 
    }, 

    ... 
} 
+0

約瑟說,有一個參考問題......'this.params'不只是'params' –