0

在处理 key[Up|Down|Press] 事件时,我应该使用 .which 还是 .keyCode?我可以有一些示例代码来处理jQuery 中的三个键盘事件吗?没有jQuery你能做到吗?我希望它在每个浏览器中都能可靠地工作。

更新

奇怪的是,jQuery 的 event.which 规范化不适用于我的 handleKey Press(事件)处理程序:

// 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中的值):

  • event.which = 0
  • 事件.charCode = 0
  • event.keyCode = 40

但是,如果我改用 handleKey Down ,则代码可以工作。我认为这与 keypress 与 keydown 有关;该代码适用于我的 handleKey Down(事件)处理程序。

不幸的是,我需要使用keypress(不是 keydown),因为我想使用箭头键进行导航:如果用​​户按住箭头键,则会触发一次keydown事件,但每次插入都会触发单独的keypress事件特点)。

4

4 回答 4

0

有关 keypress() 的文档,请参阅 jQuery API,您可以对其进行绑定。 http://api.jquery.com/keypress/

此外,这里是使用 jquery 进行按键导航的一个很好的演练:http: //net.tutsplus.com/tutorials/javascript-ajax/how-to-create-a-keypress-navigation-using-jquery/

编辑:来自 API 的重要/更相关的行:

如果需要捕获任意位置的按键(例如,在页面上实现全局快捷键),则将此行为附加到文档对象很有用。由于事件冒泡,除非明确停止,否则所有按键都会沿 DOM 向上到达文档对象。

要确定输入了哪个字符,我们可以检查传递给处理函数的事件对象。虽然浏览器使用不同的属性来存储这些信息,但 jQuery 对 .which 属性进行了规范化,因此我们可以可靠地使用它来检索字符代码。

请注意,keydown 和 keyup 提供了指示按下哪个键的代码,而 keypress 指示输入了哪个字符。例如,小写的“a”将被 keydown 和 keyup 报告为 65,但被 keypress 报告为 97。所有事件都将大写“A”报告为 65。由于这种区别,当捕获特殊按键(如箭头键)时,.keydown() 或 .keyup() 是更好的选择。

于 2010-08-25T18:32:06.020 回答
0

请参阅与您的问题相关的此线程。

一般来说,我经常争论 .which,因为它可以让你同时跟踪 charCodes 和 keyCodes。 event.which内置于 jQuery 中,以规范这些不同的方法。

您可以在此处找到有关 keyCodes 的更多信息。

于 2010-08-25T17:49:44.390 回答
0

jQuery 规范化event.which(参见:api.jquery.com/event.which/),这就是你所需要的。

于 2010-08-25T17:49:45.780 回答
0

根据此页面

event.whichkeydown在 IE<9 on and中未定义keyup

event.keyCodekeypress对于返回字符的键,在 Gecko(Seamonkey,Firefox)中为 0 。

event.charCode仅 Internet Explorer (Mac) 支持 keydown 和 keyup。

在 JSFiddle 上试试

于 2014-02-11T12:21:47.177 回答