我想将我自己的键事件处理程序附加到已经附加了另一个事件处理程序的 INPUT onkeydown
。本质上,我想在所有其他处理程序之前接收一个键事件并检查用户是否按下了某个键——如果是,我想执行一些功能并丢弃该事件,如果不是,我想将它传递给其他处理程序。
我怎么能用 jQuery 做到这一点?
我想将我自己的键事件处理程序附加到已经附加了另一个事件处理程序的 INPUT onkeydown
。本质上,我想在所有其他处理程序之前接收一个键事件并检查用户是否按下了某个键——如果是,我想执行一些功能并丢弃该事件,如果不是,我想将它传递给其他处理程序。
我怎么能用 jQuery 做到这一点?
如果您正在加载第 3 方脚本或 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: Unbind event handlers to bind them later later