【问题标题】:Keydown and keypress events gives different keyCodeKeydown 和 keypress 事件给出不同的 keyCode
【发布时间】:2015-04-25 23:59:22
【问题描述】:

我已经阅读了有关 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 ? 

这是正常的行为吗?

【问题讨论】:

  • IRRC 按键不是由所有键引发的,keydown 是。我也认为浏览器之间的键码不同。
  • 这很正常,这就是为什么会有不同的事件,因为它们的行为不同。 “当一个键被按下并且该键通常会产生一个字符值时会触发 keypress 事件” -- developer.mozilla.org/en-US/docs/Web/Events/keypress
  • 感谢您的快速评论!是的,我知道它们是不同的事件,但关键是相同的。在查看大写行为时还证明了这一点:键码似乎是相同的。
  • @ShawnJacobson 感谢您的精彩文章,我知道按键发生在按键之后、输入之前和按键之前。我只是想知道为什么 keyCode 在小写时两者之间不同,而在大写时则不同。

标签: javascript dom-events keypress keydown keycode


【解决方案1】:

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-12-17
    • 1970-01-01
    • 2015-10-28
    • 2018-02-20
    • 2015-06-17
    相关资源
    最近更新 更多