どのようにhashChangeイベントへのバインディングがバブルしないようにするには?

私は、バブリングから私の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が1回発生します)。最後のステップでは、上記のhashChangeバインディングが2回発生します。私は2番目のhashChangeをブロックするフラグをどこかに永久に設定しようとしましたが、期待したとおりに動作しません。

Question:
How can ensure this does not bubble? I'm trying something like this, but it's not working:

var $blockBubblingHashes = 0;
$(window).bind('hashchange', function( e ) {       
   if ($blockBubblingHashes == 0) {
     //run hashChange routine
      $blockBubblingHashes = 1; 
      } else {
         $blockBubblingHashes = 0;
         }
    });
5

1 答え

イベントハンドラを一度だけ起動させたい場合は、 one() 関数は、最初の実行後にハンドラを削除します。

$(window).one('hashchange', function( e ) {    
    console.log("hash fired");
   //run hashChange routine
});

ハンドブックを削除するのではなく、特にイベントのバブリングを止めたい場合は、 stopPropagation () および stopImmediatePropagation() >メソッドのイベントオブジェクト。残念ながら、すべての hashchange ハンドラをウィンドウにバインドしているという印象を受け取り、jQueryは同じ要素にバインドされたイベントハンドラが実行された順序を記録しません。そのため、どのハンドラが最初に呼び出されるかを確実に知る方法はありません。

3
追加された
stopPropagation()を試行します。これを知らなかった...
追加された 著者 frequent,
one()と両方の "propgrations"へのバインドを試行した結果、1つのイベントだけが起動され、その後は関数が無音になります。助けにならない。私はそれが "一度hashChange"を発射するために必要なので
追加された 著者 frequent,
OK。いくつかの新しい方向を私に指摘してくれてありがとう。私は外に出てくると思います。
追加された 著者 frequent,
それを見つけた。移行関数のエラーにより、別のhashChangeイベントが発生しました。あなたのポイントはすべて有効なので、私はあなたに答えを与えています。再びThx。
追加された 著者 frequent,
@frequent:すべての hashchange ウィンドウにバインドする場合は、 stopImmediatePropagation()を使用する必要がありますが、 i> jQueryは、同じ要素にバインドされたイベントハンドラが実行される順序を記録していないので、どのハンドラが最初に呼び出されるかを確実に知る方法はありません。
追加された 著者 Matt,
@frequent:私はあなたの後のことを完全には分からないので、うまくいけば誰かがあなたを助けることができる:)。
追加された 著者 Matt,
JavaScript - 日本のコミュニティ
JavaScript - 日本のコミュニティ
2 参加者の

日本人コミュニティのjavascript