.keyCode与.which

我认为这将在堆栈溢出的地方回答,但我找不到它。

如果我正在监听按键事件,我是否应该使用.keyCode.keyCode来确定Enter键是否被按下?

我一直都是这样做的:

 $("#someid").keypress(function(e) { if (e.keyCode === 13) { e.preventDefault(); // do something } }); 

但是我看到使用.keyCode代替.keyCode 。 有什么不同? 跨浏览器比另一个更友好吗?

有些浏览器使用keyCode ,其他使用which 。 如果你使用jQuery,你可以可靠地使用jQuery来标准化事物 。 更多在这里。


如果你不使用jQuery,你可以这样做:

 var key = 'which' in e ? e.which : e.keyCode; 

或者交替地:

 var key = e.which || e.keyCode || 0; 

…处理e.which可能为0的可能性(通过使用JavaScript的好奇的||运算符 ,最后恢复0 )。

jQuery根据event.whichevent.keyCodeevent.which是否被浏览器支持来event.which

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

jQuery的另外一个好处就是它也可以用来点击鼠标:

 // Add which for click: 1 === left; 2 === middle; 3 === right // Note: button is not normalized, so don't use it if ( !event.which && event.button !== undefined ) { event.which = (event.button & 1 ? 1 : ( event.button & 2 ? 3 : ( event.button & 4 ? 2 : 0 ) )); } 

看看这个: https : //developer.mozilla.org/en-US/docs/Web/API/event.keyCode

在按键事件中,按下的键的Unicode值存储在keyCode或charCode属性中,而不是两者。 如果按下的按键产生一个字符(例如'a'),charCode被设置为该字符的代码,尊重字母大小写。 (即charCode考虑shift键是否被按下)。 否则,被按下的键的代码被存储在keyCode中。 keyCode总是在keydown和keyup事件中设置。 在这些情况下,charCode从不设置。 要获取密钥的代码,无论是存储在keyCode还是charCode中,都要查询哪个属性。 通过IMEinput的字符不通过keyCode或charCode注册。

如果你留在香草JavaScript,请注意keyCode现已被弃用,将被删除:

该function已从Web标准中删除。 尽pipe一些浏览器可能仍然支持它,但它正在被丢弃。 避免使用它并尽可能更新现有的代码; 请参阅本页面底部的兼容性表格来指导您的决定。 请注意,此function可能会在任何时候停止工作

https://developer.mozilla.org/en-US/docs/Web/API/KeyboardEvent/keyCode

而是使用: .key.code,取决于你想要的行为: https : //developer.mozilla.org/en-US/docs/Web/API/KeyboardEvent/code https://developer.mozilla.org/en -US /文档/networking/ API /的KeyboardEvent /关键

两者都在现代浏览器上实现。

用于捕获键盘input和组合键的健壮的Javascript库。 它没有依赖关系。

http://jaywcjlove.github.io/hotkeys/

 hotkeys('ctrl+a,ctrl+b,r,f', function(event,handler){ switch(handler.key){ case "ctrl+a":alert('you pressed ctrl+a!');break; case "ctrl+b":alert('you pressed ctrl+b!');break; case "r":alert('you pressed r!');break; case "f":alert('you pressed f!');break; } }); 

hotkeys理解以下修饰符: shiftoptionaltctrlcontrolcommand

下列特殊键可用于快捷键: backspacetabclear pageuppagedown pageuppagedown pageuppagedown pageuppagedown pageup ,上, pageupleftright pageuppagedown pageupdelete pageupdelete pageupf1f19