[英]how to ensure binding to hashChange event does not bubble?
我正在尝试保持我的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;
}
});
如果希望事件处理程序只触发一次,则应考虑使用one()
函数,该函数在首次执行后删除处理程序。
$(window).one('hashchange', function( e ) {
console.log("hash fired");
// run hashChange routine
});
如果您特别想要停止事件冒泡,而不是删除处理程序,则应该检查事件对象的方法上的stopPropagation()
和stopImmediatePropagation()
。 不幸的是,我得到的印象是你将所有的hashchange
处理程序绑定到window
,而jQuery没有记录绑定到同一元素的事件处理程序的执行顺序; 所以你没有可靠的方法知道首先调用哪个处理程序。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.