自分のキーイベントハンドラーを、すでに別のイベントハンドラーがアタッチされているINPUTにアタッチしたいと思いonkeydown
ます。基本的に、他のすべてのハンドラーの前にキーイベントを受信し、ユーザーが特定のキーを押したかどうかを確認します。はいの場合は、いくつかの関数を実行してイベントを破棄します。いいえの場合は、イベントをに渡します。他のハンドラー。
jQueryでこれを行うにはどうすればよいですか?
自分のキーイベントハンドラーを、すでに別のイベントハンドラーがアタッチされているINPUTにアタッチしたいと思いonkeydown
ます。基本的に、他のすべてのハンドラーの前にキーイベントを受信し、ユーザーが特定のキーを押したかどうかを確認します。はいの場合は、いくつかの関数を実行してイベントを破棄します。いいえの場合は、イベントをに渡します。他のハンドラー。
jQueryでこれを行うにはどうすればよいですか?
サードパーティのスクリプトまたはjQueryアドオンをロードする場合は、最初にスクリプトまたは関数をロードするだけです。そうすれば、イベントハンドラーのバインドを解除したり、再バインドしたりする手間をかけずに、このようなものを使用できます。
// your possible interceptor code
$("#awesome").keydown(function(e) {
if (e.keyCode < 70) {
e.stopImmediatePropagation();
console.log("BLOCKED!!!");
};
});
// possible 3rd party event code loaded after your code
$("#awesome").keydown(function(e) {
console.log("3rd party:"+e.keyCode);
});
ウェブページの例=> http://mikegrace.s3.amazonaws.com/forums/stack-overflow/example-key-event-interception.html
Firebugコンソールの出力例
jQuery bind()ドキュメントによると:
「イベントが要素に到達すると、その要素のそのイベントタイプにバインドされたすべてのハンドラーが起動されます。複数のハンドラーが登録されている場合、それらは常にバインドされた順序で実行されます。」
したがって、他のハンドラーのバインドを解除し、バインドしてから、最初に実行する場合は他のハンドラーを追加し直す必要があるようです。
このスレッドには、それに関していくつかの良い情報があります 。jQuery:イベントハンドラーのバインドを解除して、後で再度バインドします。