19

所以我看到一些关于不同浏览器报告不同键码的论坛帖子,但每个人似乎都避免“为什么?”。

我试图捕获冒号 (:) keyCode 并意识到 Firefox 报告回 e.keyCode 56。而 Chrome 报告回 186(我认为就是这样)。

是否有一种通用的方法可以在所有浏览器中获取正确的 keyCode?

如果它们是相同的键,为什么它们会有所不同?

我会更好奇是否有国际化的方式来获得相同的按键。

谢谢。

4

5 回答 5

18

这取决于您是否对用户按下的物理键或用户键入的字符感兴趣。如果它是您所追求的角色,您可以在所有主要浏览器中可靠地获得它(在大多数浏览器或 IE <= 8 中使用keypress事件的which属性keyCode),但仅在keypress事件中。如果您要查找键,请使用keydownorkeyup事件并检查该keyCode属性,尽管确切的键码映射在浏览器之间确实有所不同。

可以在http://unixpapa.com/js/key.html找到对所有 JavaScript 键相关事件的出色解释和参考。

要在所有主要浏览器中可靠地检测用户键入冒号字符,您可以执行以下操作:

document.onkeypress = function(e) {
    e = e || window.event;
    var charCode = (typeof e.which == "number") ? e.which : e.keyCode;
    if (charCode && String.fromCharCode(charCode) == ":") {
        alert("Colon!");
    }
};
于 2010-10-07T16:12:56.133 回答
13

请参阅http://unixpapa.com/js/key.html了解为什么它们有不同的键。我不知道匹配键的国际方法。

于 2010-10-07T16:10:39.650 回答
3

这是一个老问题。执行此操作的现代方法是使用 event.key。请参阅MDN 密钥

于 2017-02-09T09:12:55.123 回答
0

我认为你应该让 JavaScript 来获取 ':' 字符的键码,这样脚本就会知道它在特定环境中是什么。在 stackoverflow中已经提出了类似的问题。

于 2010-10-07T16:13:04.420 回答
0

还请查看此 GitHub 文件:https ://github.com/bpeacock/key-to-charCode/blob/master/jQuery.getChar.js ,了解如何使用 keyDown 而不是 keyPress 事件。

我在移动设备上将其用于带有键盘楔的条形码扫描仪,该扫描仪在返回(keyPress)数据以扫描连字符时存在错误。效果很好。除了我在带有普通键盘的浏览器中测试应用程序时,我注意到连字符在 Chrome 上有效,但在 Firefox 上无效。奇怪但真实。除了代码 189 之外,通过在上述 JS 文件中添加代码 173 来修复。

这让我想知道键盘实际发送的是什么。用于按下连字符键 (- _) 的 keydown 代码 173 或 189 显然不是由键盘本身发送的,而是由将 keyDown 事件发送到我的 javascript 应用程序的浏览器创建的。

于 2021-05-05T08:55:48.943 回答