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