JavaScript/jQuery:用于键盘导航的Keypress(无法正常运行的事件) [英] JavaScript/jQuery: Keypress for keyboard navigation (event.which doesn't work)
问题描述
在处理key [Up | Down | Press]事件时,应该使用.which还是.keyCode?我可以使用一些示例代码来处理 jQuery中的三个键盘事件吗?没有jQuery,您能做到吗?我希望它在每种浏览器中都能可靠地工作.
When handling key[Up|Down|Press] events, should I use .which or .keyCode? Can I have some example code for handling the three keyboard events in jQuery? Can you do it without jQuery? I want it to work reliably in every browser.
更新
奇怪的是,jQuery的event.normalization不适用于我的handleKey Press (event)处理程序:
Strangely, jQuery's event.which normalization wasn't working for my handleKeyPress(event) handler:
// Add which for key events
if ( !event.which && ((event.charCode || event.charCode === 0) ? event.charCode : event.keyCode) ) {
event.which = event.charCode || event.keyCode;
}
在handleKey Press 中进行规范化之前和之后,我得到了这个(这不是将event.which设置为event.keyCode中的值):
I'm getting this before and after this normalization inside handleKeyPress (it's not setting event.which to the value in event.keyCode):
- event.which = 0
- event.charCode = 0
- event.keyCode = 40
但是,如果我改用handleKey Down ,则代码可以正常工作.我认为这与按键与按键有关.该代码适用于我的handleKey Down (事件)处理程序.
However, the code works if I use handleKeyDown instead. I think it has to do with keypress vs. keydown; the code works for my handleKeyDown(event) handler.
不幸的是,我需要使用 keypress (而不是keydown),因为我想使用箭头键进行导航:如果用户按住箭头键,则 事件会被一次触发,但每个插入的字符都会触发单独的 keypress 事件.)
Unfortunately, I need to use keypress (not keydown), since I want to use the arrow-keys for navigation: if the user presses and holds an arrow key, a keydown event is triggered once, but separate keypress events are triggered for each inserted character).
推荐答案
根据此页面 :
event.which
.
event.keyCode
为0.
event.charCode
仅在Internet Explorer(Mac)的向下键和向上键上受支持.
event.charCode
is only supported on keydown and keyup by Internet Explorer (Mac).
这篇关于JavaScript/jQuery:用于键盘导航的Keypress(无法正常运行的事件)的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!