Javascript Keydown和keypress事件提供不同的按键代码

Javascript Keydown和keypress事件提供不同的按键代码,javascript,dom-events,keypress,keydown,keycode,Javascript,Dom Events,Keypress,Keydown,Keycode,我已经阅读了有关堆栈溢出的相关答案和文章,但仍然不明白: 在Chrome控制台上,如果我在keypress和keydown事件上添加两个监听器来输出keyCode,当按键为小写时,我会得到不同的keyCode 但是,当大写时,两个事件的keyCode似乎相同 例如: document.addEventListener('keypress',function(e){console.log('keypress',e.keyCode);}); document.addEventListener('ke

我已经阅读了有关堆栈溢出的相关答案和文章,但仍然不明白:

在Chrome控制台上,如果我在
keypress
keydown
事件上添加两个监听器来输出
keyCode
,当按键为小写时,我会得到不同的
keyCode

但是,当大写时,两个事件的
keyCode
似乎相同

例如:
document.addEventListener('keypress',function(e){console.log('keypress',e.keyCode);});
document.addEventListener('keydown',function(e){console.log('keydown',e.keyCode);});
//打开你的控制台
//在结果字段中键入“a”可输出“按键97”“按键65”
//在chrome 42控制台上。激活大写字母,然后键入'A'输出'keyPress 65'和'keyDown 65'

//为什么?…很好地解释了这一点。keydown仅跟踪密钥本身,而不是密钥的状态。如果按KeyDown键,会生成一个键的KeyCode.A,如果按shift+A键,也会得到一个键的KeyCode.A。

IRRC keypress不是由所有键触发的,KeyDown是。我还认为不同浏览器的键码不同。这是正常的,这就是为什么会有不同的事件,因为它们的行为不同。“按键事件是在按下一个键时触发的,该键通常会产生一个字符值”——解释得很好。感谢您的快速评论!是的,我知道它们是不同的事件,但关键是相同的。此外,当查看大写字母行为时,这一点也得到了证明:keycode似乎是相同的。@ShawnJacobson感谢这篇伟大的文章,我知道keypress发生在keydown之后、input之前和keypup之前。我只是想知道为什么这两个键码在小写时不同,而在大写时不同。