我希望阻止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绑定会触发两次。我已经尝试永远设置一个标志来阻止第二个hashChange,但它并没有像我希望的那样工作。
问题:如何确保这不会冒泡?我正在尝试类似于以下内容的东西,但它不起作用:
var $blockBubblingHashes = 0;
$(window).bind('hashchange', function( e ) {
if ($blockBubblingHashes == 0) {
// run hashChange routine
$blockBubblingHashes = 1;
} else {
$blockBubblingHashes = 0;
}
});
hashchange
绑定到window
上,你必须使用stopImmediatePropagation()
,但是"jQuery没有记录绑定到同一元素的事件处理程序的执行顺序;因此你无法可靠地知道哪个处理程序首先被调用。" - Matt