2016-12-07 4 views
0

他のハンドラより先に処理したいkeydownイベントにイベントハンドラを追加したいと思います。今はaddEventListener呼び出しの直後に表示されるようですが、ユーザーとのやりとり後に別のjavascriptライブラリのリスナーが常に先に終了します。javascriptスタックの先頭にハンドラを置く

リスナーを実行するためにキーXを押したければ、JavaScriptを使用してハンドラを追加する可能性があります。

+0

可能性のある[jQueryイベントハンドラの重複は、それらがバインドされた順序で実行されます - これを回避しますか?](http://stackoverflow.com/questions/2360655/jquery-event-handlers-always-execute-in-orderあなたが純粋なdomソリューションのチェックを探しているなら、[this](http://stackoverflow.com/questions/2930424/add-event-to-top) -of-event-stack-using-jquery) – h2ooooooo

答えて

1

DOM2(addEventListener)ハンドラは、登録された順に呼び出されます。したがって、最初に登録すると、最初に呼び出され、stopPropagationstopImmediatePropagationを使用して他の人が呼び出されるのを防ぐことができます。

上記は特定の要素に関連していますが、あなたのハンドラがコンテナ要素にあり、の中にというハンドラが直接にアタッチされているコンテナがある場合、その内部要素のハンドラはコンテナ要素の前に呼び出されます(これはバブリング用です。他の方法ではキャプチャと呼ばれるフェーズですが、ほとんど誰もそれを使用しません)。 [the old DOM3 events specを参照してください(しかし、それはまだ有効です)。]

だから、あなたが記述しているもののために、それはあなたがコンテナ要素のハンドラを持っているように聞こえる、とライブラリがそのコンテナ内の要素 にそのハンドラを持っています。そのハンドラの前に立ち入るには、libがする前にまずその特定の要素に登録する必要があります。

+0

私は自分のkeydownハンドラをドキュメントに登録しました。ドキュメント内の特定の要素のキーダウンリスナーは、その要素が何らかの形でフォーカスされ、キーが押されたときに発生するものを意味します。 (他のハンドラを探し始める場所が不思議に思っていますから) – Hasse1987

+0

@ Hasse1987:そうです。 –

関連する問題