在我的JavaScript中,我需要捕捉键盘事件 但是,当按下某些键时,浏览器会执行某些操作,例如,如果按下退格键,则转到上一页;如果按下空格键,则滚动到页面底部。
我可以停止这些浏览器操作,例如捕获keydown
事件并调用event.preventDefault()
。但是,如果我在event.preventDefault()
事件上致电keydown
,则keypress
和keyup
事件永远不会发生。
我需要能够阻止keydown
事件的默认浏览器行为,并且在发布时仍然会捕获相同的密钥。我怎么能这样做?
答案 0 :(得分:3)
但是,如果我在keydown事件上调用event.preventDefault() keypress和keyup事件永远不会发生。
您没有取消事件本身,您刚刚使用preventDefault取消了浏览器默认操作(即默认注册事件处理程序) - 这正是你想要的 - 但你现在想要指定你自己的keyup和/或keypress 事件处理程序 ,对吧?事件keyup和keypress仍然存在,只是他们可能没有事件处理程序。完善!所以现在当然“没有任何反应” - 你就像你想要的“keydown”事件一样拿出默认事件处理程序,并且可能没有其他事件处理程序注册到keyup和keypress事件所以那里再也没有动作(处理程序)了!
因此,从您的同一事件keydown处理程序,在您致电event.preventdefault()
之后,您可以说$('#whatever').on('keyup',function(){console.log('key is up now')})
。我的意思是现在直接将keyup从同一个keydown处理程序绑定到你想要的任何函数,我相信当key上升时它应该实际触发你绑定到该事件的那个函数(即事件处理程序)。