按键和键盘 – 为什么keyCode不同?

相关: JavaScript的KeyCode与CharCode

这里是一些代码,你可以在家里或在jsfiddle尝试 :

el.addEventListener( 'keyup', function( e ) { console.log( 'Keyup event' ); console.log( e.keyCode ); } ); el.addEventListener( 'keypress', function( e ) { console.log( 'Keypress event' ); console.log( e.keyCode ); } ); 

为什么keyCode不同?

我可以理解为什么只使用按键,但我不明白的是,给定键盘上的同一个按键,两个按键事件会给出不同的按键代码。

PS:我不担心传统的浏览器支持,我在Chrome中试过这个,很惊讶,找不到解释。

事件是完全不同的目的。 使用keyupkeydown来识别物理键和keypress来识别键入的字符。 这两者在不同的事件上是根本不同的任务; 不要试图混合两者。 特别是keypress事件上的keyCode通常是多余的,不应该被使用(除了在较老的IE中,更多的参见下面的链接文档)。 对于可打印的按键,它通常与whichcharCode相同,尽pipe浏览器之间有一些差异。

Jan Wolter关于重要事件的文章已经与另一个答案联系在一起,这个主题对我来说是一个明确的词汇,并且有表格来描述每种types的关键事件和每个浏览器的不同属性。

quirksmode.org上有一篇很好的文章回答了这个问题。 你可能也想看看Unixpapa的结果 。