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

一个例子是使用 13 匹配回车键.

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

有帮助吗?

解决方案

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

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

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

  • 事件.keyCode
  • 事件.charCode
  • 事件.which

根据 Mozilla 开发人员文档,密钥的 Unicode 值将存储在 事件.keyCode 或者 事件.charCode, ,但不能两者兼而有之。无论哪一个有代码,它也会被存储在 事件.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 等上尝试过这个。

如果您想自己从头开始开发它。我建议您在可以访问的尽可能多的不同操作系统上使用尽可能多的不同浏览器,并进行一些实验以找出每个浏览器如何报告关键代码。然而,有人已经完成了这项工作。甚至在 答案之一 以您作为示例链接的问题!这是一个名为 jQuery 的插件 js 热键. 。它允许您注册在按下某个键或组合键时要执行的回调函数。我从项目网站复制的示例用法:

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

它已经过测试,可以在各种不同的浏览器/平台上工作,所以如果您使用 jQuery,这可能是正确的选择。如果您出于某种原因不想使用 jQuery,那么您也不走运。显然这是基于 另一个脚本 你可以用它来代替。我个人还没有使用过这两个库,所以我不能保证它们的易用性或功效。也就是说,如果我遇到你的问题,这就是我寻求解决它的方向。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top