如何使用 jQuery 将键盘事件处理程序挂接到 INPUT 元素上?

发布于 2024-10-05 02:01:24 字数 179 浏览 5 评论 0原文

我想将我自己的按键事件处理程序附加到已将另一个事件处理程序附加到 onkeydown 的 INPUT。本质上,我想在所有其他处理程序之前接收一个按键事件,并检查用户是否按下了某个键——如果是,我想执行一些功能并丢弃该事件,如果不是,我想将其传递给其他处理程序。

我怎样才能用 jQuery 做到这一点?

I want to attach my own key event handler to an INPUT that already has another event handler attached to onkeydown. Essentially, I want to receive a key event before all the other handlers and check if the user pressed a certain key -- if yes, I want to perform some functions and discard the event, if no, I want to pass it along to the other handler(s).

How can I do this with jQuery?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

绮烟 2024-10-12 02:01:24

如果您正在加载第 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 控制台的示例输出
alt text

jQuery stopImmediatePropagation() 文档

If you are loading a 3rd party script or jQuery addon you can just load your script or function first. If you do that then you can use something like this without the mess of unbinding and rebinding event handlers.

// 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);
});

Example webpage => http://mikegrace.s3.amazonaws.com/forums/stack-overflow/example-key-event-interception.html

Example output of Firebug console
alt text

jQuery stopImmediatePropagation() documentation

行至春深 2024-10-12 02:01:24

根据 jQuery bind() 文档:

“当事件到达某个元素时,将激发绑定到该元素的该事件类型的所有处理程序。如果注册了多个处理程序,它们将始终按照绑定的顺序执行。 ”

因此,如果您希望首先运行您的处理程序,您似乎必须取消绑定其他处理程序,绑定您的处理程序,然后将其他处理程序添加回来。

该线程中有一些与此相关的好信息:
jQuery:取消绑定事件处理程序以便稍后再次绑定它们

According to the jQuery bind() documentation:

"When an event reaches an element, all handlers bound to that event type for the element are fired. If there are multiple handlers registered, they will always execute in the order in which they were bound."

So it looks like you will have to unbind the other handlers, bind yours and then add the others back if you want yours to run first.

There is some good information in this thread with respect to that:
jQuery: Unbind event handlers to bind them again later

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文