我试图防止我的hashChange事件绑定(bind)冒泡。
我有这个:
$(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;
}
});
最佳答案
如果您希望事件处理程序仅触发一次,则应考虑使用 one()
函数,该函数在首次执行后将其删除。
$(window).one('hashchange', function( e ) {
console.log("hash fired");
// run hashChange routine
});
如果您特别想停止事件冒泡,而不是删除处理程序,则应在事件对象的方法上 check out
stopPropagation()
和 stopImmediatePropagation()
。不幸的是,我得到的印象是您将所有hashchange
处理程序绑定(bind)到window
,而jQuery没有记录绑定(bind)到同一元素的事件处理程序的执行顺序;因此,您将没有可靠的方法来知道首先调用哪个处理程序。关于javascript - 如何确保绑定(bind)到hashChange事件不会冒泡?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/8267999/