javascript - 防止浏览器对 keydown 事件使用react,但不取消该事件

标签 javascript events

在我的 JavaScript 中,我需要捕获键盘事件。
但是,当按下某些键时,浏览器会执行特定操作,例如,如果按下退格键则转到上一页,或者如果按下空格键则滚动到页面底部。

我可以通过捕获 keydown 事件并调用 event.preventDefault() 来停止这些浏览器操作。但是,如果我在 keydown 事件上调用 event.preventDefault(),则 keypresskeyup 事件永远不会发生。

我需要能够阻止 keydown 事件的默认浏览器行为,并且在释放相同的按键时仍然捕获它们。我怎样才能做到这一点?

最佳答案

However, if I call event.preventDefault() on the keydown event the keypress and keyup events never occur.

您没有取消事件本身,您只是使用 PreventDefault 取消了浏览器默认操作(即默认注册的事件处理程序) - 这正是您想要的 - 但您现在想要指定您自己的键盘和/或按键事件处理程序,对吧?事件 keyup 和 keypress 仍然存在,只是它们可能没有事件处理程序。完美的!所以现在当然“什么也没发生” - 像你想要的“keydown”事件一样取出了默认的事件处理程序,并且可能没有其他事件处理程序注册到 keyup 和 keypress 事件,所以有不再需要触发任何操作(处理程序)!

因此,在同一个事件 keydown 处理程序中,在调用 event.preventdefault() 之后,您可以说 $('#whatever').on('keyup',function( ){console.log('key is up now')}) 例如。我的意思是,现在只需将 keyup 从相同的 keydown 处理程序直接绑定(bind)到您想要的任何函数,我相信当按键上升时,它实际上应该触发您绑定(bind)到该事件的函数(即事件处理程序)。

关于javascript - 防止浏览器对 keydown 事件使用react,但不取消该事件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12352667/

相关文章:

javascript - 如何获取表格的单元格索引?

javascript - 按键值对 JavaScript 数组中的对象进行排序

C#:form.Close 方法、FormClosing 事件和 CloseReason 事件参数。设置自定义关闭原因?

c# - WPF 图像的单击事件

javascript - 如何将事件从 VB.Net 类库/用户控件 (ActiveX) 提升到 JavaScript?

javascript - 我如何在 javascript 中创建类后运行函数

javascript - 让子 Controller 监听父 Controller 的更改

javascript - 提交前设置表单变量值

jquery - 检查特定元素上是否发生 mousedown() 事件

ios - iPhone 识别按下主页按钮