Javascript:不同浏览器上的不同keyCodes?

时间:2010-10-07 16:02:04

标签: javascript keycode

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

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

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

如果它们是相同的键,它们为什么不同呢?

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

感谢。

5 个答案:

答案 0 :(得分:14)

这取决于您是否对用户按下的物理键或用户键入的字符感兴趣。如果它是你所追求的角色,你可以在所有主流浏览器中可靠地获得它(在大多数浏览器中使用keypress事件的which属性或在IE< = 8中使用keyCode,但仅限于keypress事件。如果您正在使用密钥,请使用keydownkeyup事件并检查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!");
    }
};

答案 1 :(得分:12)

请参阅http://unixpapa.com/js/key.html,了解他们为何拥有不同的密钥。我不知道匹配密钥的国际方式。

答案 2 :(得分:2)

这是一个老问题。现代的方法是使用event.key。见MDN Key

答案 3 :(得分:0)

我认为您应该使用JavaScript来获取':'字符的键代码,因此脚本将知道在特定环境中它是什么。有人问here, in stackoverflow

答案 4 :(得分:0)

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

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

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