2012-01-29 7 views
3

Webページには、クリックまたはキー押しハンドラを持つ要素があります。私が新しいものを追加すると、それはそれらの後に実行されます。私は、イベントハンドラリストの前に追加された新しいコールバックを追加して、事前に実行されるようにする必要があります。 jQueryではどのように可能ですか?jQueryイベント:既存のものにコールバックハンドラを追加

更新

は、なぜ私はj​​Queryのバインド解除方法を使用することはできませんか?私は任意のWebページに私のjQueryコードを注入しているので、JavaScriptフレームワークが使用されているかどうかわかりません。私はイベントハンドラを検出し、私の前に置く普遍的な方法が必要です。 (あなたが尋ねる前に、私はそれらを格納し、後でそれらを実行するために、ユーザーの行動を追跡する「レコーダー」アプリケーションを構築しています。)

アップデート2

私はFirefoxのみ、の必要はありませんを使用しますIEとの互換性。ページが完全にロードされるのを待たなければなりません。その後、jQueryスクリプトが呼び出されます。

+0

あなたが管理しているスクリプトですか?つまり、バインドを解除してすべてを再バインドできますか? – kinakuta

+0

コールバックは、イベントが発生した後に常に実行されます。古いハンドラに何か特別な処理をさせたいのであれば、既存のハンドラのコードを変更するだけではいかがですか? –

+0

数日前に同じ質問が尋ねられました。私はそれを探してみましょう。 – Avaq

答えて

2

バブリング(子 - >祖先)ではなく、イベントキャプチャ(イベントが要素に到達する前に祖先のハンドラが呼び出される)を使用すると、これが機能すると考えられます。これは、ターゲット要素に達する前にイベントをインターセプトする方法です。

ほとんどのイベントハンドラは、イベントのバブルを使用します。 w3cによると、最初にイベントがキャプチャされ、ターゲットから再びバブルアップします。したがって、キャプチャを使用してイベントをドキュメントにバインドする場合は、ページ上のすべての要素に対してイベントが最初に実行されます。

http://www.w3.org/TR/2000/REC-DOM-Level-2-Events-20001113/events.html#Events-flow-capture

あなたはとのハンドラをバインドします:

document.body.addEventListener('click',handler,true) 

これはイベントの前に、要素内のすべてのクリックのために実行されます(第3引数は、キャプチャイベントを使用するかどうかです)ハンドラが実行されます。私はブラウザでのサポートについては確信していません。

+0

これはうまくいくようですが、ありがとうございます。私はそれがすべての可能な場合をカバーしないと信じていますが。 – Alp

関連する問題