【问题标题】:In a KeyboardEvent, which property should be used to determine which key is pressed?在 KeyboardEvent 中,应该使用哪个属性来确定按下了哪个键?
【发布时间】:2017-07-22 21:52:00
【问题描述】:

例如按键事件将返回以下内容

KeyboardEvent {
    charCode: 32,
    code: "Space",
    key: " ", // space character
    keyCode: 32,
    which: 32
}

其中哪些(如果有)已弃用/不应使用?代码对我来说很有意义,因为它是人类可读的。 Afaik,which 已弃用。

【问题讨论】:

  • key 在(未)按下 shift 时分别给出 cC,而 code 在两种情况下都返回 KeyC。此外,这会忽略用户的键盘布局。

标签: javascript keyboard-events


【解决方案1】:

我刚刚做了一些研究...根据 mdn (https://developer.mozilla.org/en-US/docs/Web/API/KeyboardEvent) 我们应该使用key“如果可用”。

char 已弃用

charCode 已弃用

keyCode 已弃用

which 已弃用

code 没有被弃用,所以我假设如果key 不可用,我们会使用它。

【讨论】:

    【解决方案2】:

    我正在查看调试器并在 Angular 2 中跟踪事件对象。您显然会使用 keyCode。我很确定这也是文档所说的。对这次谈话的去向感兴趣。但是请注意,我使用 keyCode 并从所有键(输入 shift 等)中准确获取我需要的内容。

    我猜这是有道理的;你想要钥匙,使用钥匙代码。您想要角色,请使用 charCode。您可能直觉它们是相同的,但似乎它们不是(或至少,并非总是如此)。

    只是为了添加所有细节,我绑定到 keyup 事件。它可能不是特定于 Angular 2 的,而只是共享环境等。

    【讨论】:

    • keyCode 已弃用,不应使用(尽可能)。
    • 您能否展示一些具有这种效果的文档(这不容易被反驳)?查看调试器中的信息,charCode 没有用。我看到对 MDN 的引用说不​​推荐使用,但我也看到 W3C event.key 没有得到普遍支持。角度文档经常提到 keyCode。另一个stackoverflow 回答说有key、keyCode 和keyIdentifier。但同样,在传递事件时,唯一始终有用的东西似乎是 keyCode。见stackoverflow.com/questions/35394937/…
    • 无论如何,尽管如此,我环顾四周,无法确定弃用是一个实际且一致的事实。 (注意这里的重点是找出对日常开发有用的做法,而不是说你错了)。
    【解决方案3】:

    keyCode 确定按下了哪个键。除了 keyCode 包括 shiftKey,altKey,ctrlKey,metaKey 以检测特殊键。

    【讨论】:

    • 有趣的是,keyCode 是我在 Angular 2 中使用的。我在传入事件中看不到 charcode。
    • 它们是一样的。所以你必须使用var key = e.charCode | e.keyCode
    • 其实我收回了。 charCode 将是输入的字符。键码是按下的键。它们不一样(现在在调试器中查找)。例如,我看到 charCode 0,keyCode 62。我会说 keyCode 对于知道密钥是正确的(出于某种原因,我认为我已经知道这一点)。我的意思是,如果你仔细想想,这确实有点道理。
    • 是的,差异最低版本浏览器的差异属性。但现在它们都可以在许多浏览器中使用。
    • 是的,我没有看到 charcode,因为我正在做一个幼稚的虚假检查。值为 0,所以我“没看到”。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2023-04-07
    • 2010-12-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-12-11
    相关资源
    最近更新 更多