首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何确保绑定到hashChange事件不冒泡?

如何确保绑定到hashChange事件不冒泡?
EN

Stack Overflow用户
提问于 2011-11-25 10:51:21
回答 1查看 3K关注 0票数 5

我正在努力防止hashChange事件绑定冒泡。

我有这个:

代码语言:javascript
复制
$(window).bind('hashchange', function( e ) {
    console.log("hash fired");
    // run hashChange routine
    });

我的脚本管理页面上的面板,每个面板都有自己的历史堆栈。上面的每个转换都会触发,但是我在前向转换中阻塞了hashChange,所以我可以更深入地导航到面板中。在向后的“转换”中,只有hashChange触发而不被阻塞,所以我可以重新启动。

导航可能如下所示:

代码语言:javascript
复制
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绑定触发两次。我一直试图在某个地方设置一个标志来阻止第2 hashChange,但它并不像我所希望的那样有效。

问题:

怎么才能保证这不会泡泡呢?我试着做这样的事,但不管用:

代码语言:javascript
复制
var $blockBubblingHashes = 0;
$(window).bind('hashchange', function( e ) {       
   if ($blockBubblingHashes == 0) {
      // run hashChange routine
      $blockBubblingHashes = 1; 
      } else {
         $blockBubblingHashes = 0;
         }
    });
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2011-11-25 10:53:47

如果希望事件处理程序只触发一次,则应该考虑使用one()函数,该函数在第一次执行之后删除处理程序。

代码语言:javascript
复制
$(window).one('hashchange', function( e ) {    
    console.log("hash fired");
    // run hashChange routine
});

如果您特别希望停止事件冒泡,而不是删除处理程序,则应该签出事件对象的方法上的stopPropagation()stopImmediatePropagation()。不幸的是,我认为您正在将所有hashchange处理程序绑定到window,而jQuery并没有记录绑定到同一元素的事件处理程序执行的顺序;因此,您将没有可靠的方法来知道首先调用哪个处理程序。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/8267999

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档