2011-05-30 39 views
2

我正在使用Ben AlmanjQueryhashChange事件插件。 散列部是這樣的:如何用jQuery基於哈希值在哈希值變化上觸發不同的函數?

#x=1&y=2&z=3 

我已經有解析它getHashPart(key)setHashPart(key)功能。

我想有一個函數,只允許註冊散列的特定部分的變化。 我會用它作爲這樣的(我猜...):

$(window).hashchange('x',function(new_value_of_x) {do something x related;}); 
$(window).hashchange('y',function(new_value_of_y) {do something y related;}); 

我怎麼會用jQuery註冊這樣的功能? 有什麼相似之處?

謝謝!

+1

http://www.bennadel.com/blog/1520-Binding-Events-To-Non-DOM-Objects-With-jQuery.htm解釋瞭如何爲網頁的網址設置onchange事件。然而,如果你正在做我認爲你正在做的事情,你應該綁定設置哈希的鏈接以執行你想要的操作,然後在文檔加載時檢查URL中是否存在任何哈希以執行操作應該。 – Niklas 2011-05-30 10:05:48

+0

好文章。我會堅持看看其他建議的解決方案。 – Ben 2011-05-30 11:57:48

+1

ps。如果我是你,我會把問題的標題改爲「如何通過jQuery來基於哈希值來改變哈希值的不同函數」。只是一個提議。 – 2011-05-30 15:24:45

回答

4

你可以有響應所有hashchange事件(最好保持在利用hashchange插件)的函數,然後重定向到單個處理程序是這樣的:

var hashParameters = {}; 

$(window).bind("hashchange",function(event) { 
//if you're using the awesome hashchange plugin 
//$(window).hashchange(function(event) { ... 
    var newParameters = getParameters(event.target.location.hash.substring(1)); 
    $.each(newParameters, function(key, value) { 
     if(hashParameters[key] !== value) $(window).trigger(key + "-change"); 
     hashParameters[key] = value; 
    }); 
}); 

$(window).bind("andsome-change", function() { 
    alert("hi!"); 
}); 

function getParameters(paramString) { 
    //taken from http://stackoverflow.com/questions/4197591/parsing-url-hash-fragment-identifier-with-javascript/4198132#4198132 
    var params = {}; 
    var e, a = /\+/g, r = /([^&;=]+)=?([^&;]*)/g, 
     d = function (s) { return decodeURIComponent(s.replace(a, " ")); }; 
    while (e = r.exec(paramString)) 
     params[d(e[1])] = d(e[2]); 
    return params; 
} 

window.location.hash = "some=value&andsome=othervalue"; 

我有一個工作演示here(現使用hashchange插件,請參閱第一條評論)。

+1

+1,你可以在jsFiddle中包含外部腳本 - 左鍵點擊「添加資源」並粘貼鏈接。或者,只需在HTML框架中粘貼' 。 – 2011-05-30 15:07:40

+0

「我不能」意思是「我太懶惰了」=))非常感謝這個建議,這裏是修復鏈接:http://jsfiddle.net/TuVBL/1/ – 2011-05-30 15:12:16