JavaScript / jQuery:用于键盘导航的键盘(event.which不起作用)

时间:2010-08-25 17:43:11

标签: javascript jquery keypress keydown onkeyup

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

更新

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

// Add which for key events
if ( !event.which && ((event.charCode || event.charCode === 0) ? event.charCode : event.keyCode) ) {
    event.which = event.charCode || event.keyCode;
}

我在handleKey 之前和之后得到这个(它没有将event.which设置为event.keyCode中的值):

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

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

不幸的是,我需要使用 keypress (而不是keydown),因为我想使用箭头键进行导航:如果用​​户按下并按住箭头键, > keydown 事件被触发一次,但会为每个插入的字符触发单独的 keypress 事件。

4 个答案:

答案 0 :(得分:0)

请参阅与您的问题相关的this thread

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

您可以找到有关keyCodes here的更多信息。

答案 1 :(得分:0)

jQuery规范化event.which(请参阅:api.jquery.com/event.which/),这就是您所需要的一切。

答案 2 :(得分: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()是更好的选择。

答案 3 :(得分:0)

根据this page

event.whichkeydown的IE< 9中未定义

keyup

对于返回字符的键,event.keyCode上的Gecko(Seamonkey,Firefox)中的

keypress为0。

event.charCode仅在Internet Explorer(Mac)的keydown和keyup上受支持。

Try it on JSFiddle