【问题标题】:JavaScript: Avoiding hardcoded keycodes [duplicate]JavaScript:避免硬编码的键码
【发布时间】:2013-01-11 11:12:44
【问题描述】:

可能重复:
JavaScript event.keyCode constants

这是我的代码:

$button.on('keyup', function (event) {
    // Detect an Enter keypress
    if(event.keyCode === 13) {
        doStuff();
    }
});

如您所见,键码13 是硬编码的。是否有一种(跨浏览器)方法可以以更语义化的方式提取该数字?

【问题讨论】:

  • 如果有比 ASCII 十进制代码更语义化和更简洁的东西,我从未见过。当然,您可以制作一张地图var keys = { enter: 13 } 并通过event.code === keys.enter 进行搜索,但我个人更喜欢查看实际的键码来确定脚本在做什么,而无需查找对象的定义。不,据我所知,Enter 键不存在跨浏览器/平台问题。
  • 只需定义一个对象,其键码为值,键名作为键。没有内置的枚举。
  • 尽管我最初发表了评论,但当您使用许多键进行操作时,键映射可能很有用,例如映射所有箭头键比为每个箭头键写一个数字更具语义。 =]
  • @AlexK。无需按照 OP 要求对其进行硬编码即可获得回车键码的非常聪明的技巧,可能是 imo 的答案。 =]

标签: javascript keycode


【解决方案1】:

如果你使用 jQueryUI,你可以使用$.ui.keyCode 常量:

keyCode: {
    BACKSPACE: 8,
    COMMA: 188,
    DELETE: 46,
    DOWN: 40,
    END: 35,
    ENTER: 13,
    ESCAPE: 27,
    HOME: 36,
    LEFT: 37,
    NUMPAD_ADD: 107,
    NUMPAD_DECIMAL: 110,
    NUMPAD_DIVIDE: 111,
    NUMPAD_ENTER: 108,
    NUMPAD_MULTIPLY: 106,
    NUMPAD_SUBTRACT: 109,
    PAGE_DOWN: 34,
    PAGE_UP: 33,
    PERIOD: 190,
    RIGHT: 39,
    SPACE: 32,
    TAB: 9,
    UP: 38
}

所以为了检查 Enter 按下使用:

if (event.keyCode === $.ui.keyCode.ENTER) { ... }

【讨论】:

  • 这些当然不是唯一的持续跨浏览器的keyCodes,对吧? @视觉
  • 时间的流沙打破了那个链接; here's a working one(截至 2014 年 10 月)
【解决方案2】:

重复Alex K.的回答(我用过):

"\r".charCodeAt(0)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-01-07
    • 1970-01-01
    • 2022-10-31
    • 2011-01-01
    • 2011-05-01
    • 2018-11-19
    • 2018-10-29
    • 1970-01-01
    相关资源
    最近更新 更多