我試圖讓我的hashChange事件綁定冒泡。如何確保綁定到hashChange事件不會冒泡?
我有這樣的:
$(window).bind('hashchange', function(e) {
console.log("hash fired");
// run hashChange routine
});
我的腳本管理面板在頁面上具有它自己的歷史堆棧中的每個面板。上面的每個轉換都會觸發,但是我正在阻止hashChange轉換,所以我可以更深入地瀏覽面板。在向後「轉換」時,只有hashChange被觸發並且沒有被阻塞,所以我可以回去了。
導航可能是這樣的:
panel A, start down > page2
panel A, page2 down > page3
panel A, page3 up > page2
panel A, page2 up > start - hashChange fires twice here...
一切運作良好(= hashChange觸發一次),直到我在初始設置之前到達的頁面。在最後一步,上面的hashChange-binding會觸發兩次。我一直試圖設置一個標誌來阻止第二個hashChange,但它並不像我所希望的那樣工作。
問題:
如何確保這不泡?我想這樣的事情,但它不工作:
var $blockBubblingHashes = 0;
$(window).bind('hashchange', function(e) {
if ($blockBubblingHashes == 0) {
// run hashChange routine
$blockBubblingHashes = 1;
} else {
$blockBubblingHashes = 0;
}
});
嘗試stopPropagation()。不知道這個...... – frequent
@frequent:如果你將所有'hashchange'綁定到'window',你必須使用'stopImmediatePropagation()',但是「* jQuery沒有文檔order綁定到同一個元素的順序事件處理程序會被執行;所以你將沒有可靠的方法來知道哪個處理程序首先被調用。*「 – Matt
嘗試綁定到一個()和兩個」propgrations「,都只導致一個事件在此之後,功能無聲。沒有幫助。因爲我需要它發射「每hashChange一次」 – frequent