处理关键[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中的值):
但是,如果我使用handleKey Down ,则代码可以正常工作。我认为这与keypress vs. keydown有关;该代码适用于我的handleKey Down (事件)处理程序。
不幸的是,我需要使用 keypress (而不是keydown),因为我想使用箭头键进行导航:如果用户按下并按住箭头键, > keydown 事件被触发一次,但会为每个插入的字符触发单独的 keypress 事件。
答案 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.which
和keydown
的IE< 9中未定义 keyup
。
event.keyCode
上的Gecko(Seamonkey,Firefox)中的 keypress
为0。
event.charCode
仅在Internet Explorer(Mac)的keydown和keyup上受支持。