簡體   English   中英

如何確保綁定到hashChange事件不會冒泡?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM