Keydown 和 keypress 事件给出不同的 keyCode

Keydown and keypress events gives different keyCode

我已经阅读了 Stack Overflow 上的相关答案和文章,但仍然没有理解:

在 Chrome 控制台上,如果我在 keypresskeydown 事件上添加两个侦听器以输出 keyCode,当键为小写时,我会得到不同的 keycode .

然而,当大写时,两个事件的 keyCode 似乎相同。

示例:

document.addEventListener('keypress', function(e){ console.log('keyPress', e.keyCode); });
document.addEventListener('keydown', function(e){ console.log('keyDown', e.keyCode); });

// Open your console  
// Typing 'a' in the result field outputs 'keyPress 97' 'keyDown 65'
// on chrome 42 console. Activate uppercase, and then typing 'A' outputs 'keyPress 65' and 'keyDown 65'

// Why ? 

这是正常行为吗?

What's the difference between KeyDown and KeyPress in .NET?... 解释得很好。 keydown 仅跟踪键本身,而不是键的状态。如果你按下 A KeyDown 生成一个 Keys.A 的 KeyCode 如果你按下 shift+A 你也得到了 Keys.A.

的 KeyCode