1

私は十分に明確であることを願っていますが、私の状況と私がやりたいことは少し複雑です.

このjsfiddleで私の問題を説明し始めます

ご覧のとおり、3 つのネストされたブロックがあります。JavaScript コードは 2 つの部分に分かれています。このスクリプトは、すべてのブロックでイベントを作成し、「return false」で伝播を停止します (「e.stopPropagation」にも同じ問題があります)。JavaScript の他の部分は、私が書いているスクリプトです。Enter キーを押した後、クリックの動作を変更したい: #b (または #b にある #c) をクリックすると、「gruik」と「gruik」のみを表示したい。そのために、他の「クリック」イベントを (変更できないコードから) 削除し、独自の「クリック」イベントを作成します。

さて、私の実際の状況: 「変更できないコード」は、いくつかのグラフィックス (私の例ではブロックで表されています) を作成する highstock ライブラリ (18,000 行のコードで、あまり深く掘り下げたくない) です。それらが「ライブ」、「バインド」、または「デリゲート」を使用しているかどうかはよくわかりません。また、どのブロックにイベントが添付されているかもわかりません (グラフはいくつかのネストされたブロックにあります)。

今私の問題:私は私の例でいくつかのイベントを殺しますが、いくつかの理由で適切ではありません:おそらく、グラフのコンテナのすべての子のすべての「クリック」イベントを殺す(およびアンバインド+デリゲート解除)ことができますが、どうすればできますか?その後、私はそれらを「復活」させますか?最初の質問: イベントを強制終了したときに、それをどこかに保持して「復活」させることは可能ですか?

別の解決策は、誰も殺さずに自分のイベントの「最優先事項」を作成することですが、Javascript ではそれが可能だとは思いません。

私は十分に明確であったことを願っています:/

PS: highstock ライブラリのデモ

4

1 に答える 1

0

まず最初に、これを行う (つまり、イベント ハンドラーを無効にする) ための推奨される方法は、イベント ハンドラー自体に、ロジックを続行するかどうかを認識させることです。おそらく何らかのフラグを介して。少なくとも、bind/unbindとその同類よりも優先されます。ただし、トップコードが絶対に変更できない場合、それは問題外です。

// i.e.
$(element).click(function (e) {
    // bail?
    if (some_flag) { return; }

    // continue...
});

ただし、jQuery を使用して、任意の要素に登録されたすべてのイベント ハンドラーのハンドルを取得できる必要があります。これにより、それらをキャッシュし、必要に応じてunbind再度キャッシュすることができますbind

于 2012-07-13T17:18:59.493 に答える