我试图防止我的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/

10-12 12:56