Javascript 阻止浏览器对keydown事件作出反应,但不取消该事件

Javascript 阻止浏览器对keydown事件作出反应,但不取消该事件,javascript,events,Javascript,Events,在JavaScript中,我需要捕捉键盘事件。 但是,当按下某些键时,浏览器会执行某些操作,例如,如果按下backspace,则会转到上一页;如果按下空格键,则会滚动到页面底部 我可以停止这些浏览器操作,例如捕获keydown事件并调用event.preventDefault()。但是,如果我在keydown事件上调用event.preventDefault(),则keypress和keydup事件永远不会发生 我需要能够阻止keydown事件的默认浏览器行为,并且在释放键时仍然捕获相同的键。我

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

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

我需要能够阻止
keydown
事件的默认浏览器行为,并且在释放键时仍然捕获相同的键。我该怎么做

但是,如果我在keydown事件上调用event.preventDefault() keypress和keyup事件从不发生

您没有取消事件本身,您只是用preventDefault取消了浏览器默认操作(即默认注册的事件处理程序),这正是您想要的-但是您现在想要指定自己的keyup和/或keypress事件处理程序,对吗?事件keyup和keypress仍然存在,只是它们可能没有事件处理程序。完美的所以现在当然是“什么都没发生”-您按照“keydown”事件的要求删除了默认事件处理程序,并且可能没有其他事件处理程序注册到keyup和keypress事件,因此不再有操作(处理程序)要触发了

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

但是,如果我在keydown事件上调用event.preventDefault() keypress和keyup事件从不发生

您没有取消事件本身,您只是用preventDefault取消了浏览器默认操作(即默认注册的事件处理程序),这正是您想要的-但是您现在想要指定自己的keyup和/或keypress事件处理程序,对吗?事件keyup和keypress仍然存在,只是它们可能没有事件处理程序。完美的所以现在当然是“什么都没发生”-您按照“keydown”事件的要求删除了默认事件处理程序,并且可能没有其他事件处理程序注册到keyup和keypress事件,因此不再有操作(处理程序)要触发了


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

只需在事件中添加条件即可。如果它是一个键,您不希望浏览器响应,请使用preventDefault(),否则不要响应,反之亦然。如果您在
keydown
中处理该事件,为什么要在
keyup
中再次捕获该事件?如果您真的愿意,您可以直接从
keydown
显式调用
keyup
处理程序。我无法重现这种行为。只需在事件中添加条件。如果它是一个键,您不希望浏览器响应,请使用preventDefault(),否则不要响应,反之亦然。如果您在
keydown
中处理该事件,为什么要在
keyup
中再次捕获该事件?如果您真的愿意,您可以直接从
keydown
显式调用
keyup
处理程序。我无法重现这种行为。很抱歉,跟进有点晚。无论如何,我有点快,即使我调用event.prevetDefault(),按键释放时也会发生keyup事件,但keypress事件从未发生过。我有按键、按键和按键的处理程序。(我想要捕获keypress事件的原因是该事件具有'charCode'属性,而keydown仅具有'keyCode')。一些代码示例可能会有所帮助,但我认为从keyup事件手动调用keypress事件可能是您的解决方案。从key up处理程序中,执行myjQueryElement.trigger(“keypress”),很抱歉后续操作有点晚。无论如何,我有点快,即使我调用event.prevetDefault(),按键释放时也会发生keyup事件,但keypress事件从未发生过。我有按键、按键和按键的处理程序。(我想要捕获keypress事件的原因是该事件具有'charCode'属性,而keydown仅具有'keyCode')。一些代码示例可能会有所帮助,但我认为从keyup事件手动调用keypress事件可能是您的解决方案。在向上键处理程序中,执行myjQueryElement.trigger(“按键”)