【问题标题】:How to avoid magic numbers when matching an event.keyCode in Javascript如何在 Javascript 中匹配 event.keyCode 时避免幻数
【发布时间】:2009-03-04 18:28:46
【问题描述】:

在 Javascript 中匹配按键时可以避免幻数吗?

一个例子是使用13 to match the enter key

我可以指定自己的常量,但我不知道这些值在不同平台/浏览器/语言环境中是否足够稳定。

【问题讨论】:

    标签: javascript dom-events standards magic-numbers


    【解决方案1】:

    我第一次尝试这样做时,我使用了 String 的 charCodeAt 方法。例如,如果您想检测“a”键的按下:

    if ("A".charCodeAt(0) == event.keyCode) {
      /* Do stuff here. */
    }
    

    请注意,我使用了大写字母“A”而不是“a”。这是因为 event.keyCode 仅报告为大写字母的 Unicode 值(如果它是 alpha 键)。使这个问题有点棘手的是,有几种方法可以获取所按下键的 Unicode 值。在 Firefox 中,您有:

    • event.keyCode
    • event.charCode
    • event.which

    根据 Mozilla 开发人员文档,密钥的 Unicode 值将存储在 event.keyCodeevent.charCode 中,但不能同时存储在两者中。不管哪一个有代码,它也会存储在event.which中。但是,如果值存储在 charCode 中,它将区分大小写。因此,根据您从哪里获取事件,您可能必须同时检查“a”和“A”。如果您只能从“onkeydown”事件中获取关键事件,并且您的目标是 Firefox,那么您可以指望在 event.keyCode 中设置不区分大小写(大写)的代码。事实上,我在 Windows XP 上的 Firefox 3.0.3、MacOS 10.4 上的 Firefox 3.0.4、MacOS 10.4 上的 Safari 3.2.1 和 MacOS 10.4 上的 OmniWeb 5.8 上进行了测试,并且一切都一样。但是,我还没有在任何 IE 版本或 Opera 等上尝试过。

    如果您想自己从头开始开发。我建议在尽可能多的不同操作系统上找到尽可能多的不同浏览器,并进行一些试验以了解每个浏览器如何报告关键代码。但是,已经有人完成了这项工作。 one of the answers 中甚至提到了您作为示例链接的问题!它是一个名为js-hotkeys 的jQuery 插件。它允许您注册回调函数以在按下某个键或组合键时执行。我从项目站点复制的示例用法:

    $(document).bind('keydown', 'Ctrl+a', fn);
    

    它已经过测试,可以在各种不同的浏览器/平台上工作,所以如果你使用 jQuery,这可能是要走的路。如果您出于某种原因不想使用 jQuery,那么您也不会不走运。显然这是基于您可以使用的another script。我个人还没有使用过这些库中的任何一个,所以我不能保证它们的易用性或有效性。也就是说,如果我遇到了你的问题,这就是我想要解决的方向。

    【讨论】:

    • 感谢您 - 很抱歉这么晚才接受您。我不知何故完全错过了你的答案。
    • 没问题。声誉的一点延迟提升总是一个惊喜。
    猜你喜欢
    • 2018-01-13
    • 1970-01-01
    • 1970-01-01
    • 2015-06-05
    • 2023-01-12
    • 1970-01-01
    • 2010-12-25
    • 1970-01-01
    • 2011-04-10
    相关资源
    最近更新 更多