所以我看到一些关于不同浏览器报告不同键码的论坛帖子,但每个人似乎都避免“为什么?”。
我试图捕获冒号 (:) keyCode 并意识到 Firefox 报告回 e.keyCode 56。而 Chrome 报告回 186(我认为就是这样)。
是否有一种通用的方法可以在所有浏览器中获取正确的 keyCode?
如果它们是相同的键,为什么它们会有所不同?
我会更好奇是否有国际化的方式来获得相同的按键。
谢谢。
所以我看到一些关于不同浏览器报告不同键码的论坛帖子,但每个人似乎都避免“为什么?”。
我试图捕获冒号 (:) keyCode 并意识到 Firefox 报告回 e.keyCode 56。而 Chrome 报告回 186(我认为就是这样)。
是否有一种通用的方法可以在所有浏览器中获取正确的 keyCode?
如果它们是相同的键,为什么它们会有所不同?
我会更好奇是否有国际化的方式来获得相同的按键。
谢谢。
这取决于您是否对用户按下的物理键或用户键入的字符感兴趣。如果它是您所追求的角色,您可以在所有主要浏览器中可靠地获得它(在大多数浏览器或 IE <= 8 中使用keypress
事件的which
属性keyCode
),但仅在keypress
事件中。如果您要查找键,请使用keydown
orkeyup
事件并检查该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!");
}
};
请参阅http://unixpapa.com/js/key.html了解为什么它们有不同的键。我不知道匹配键的国际方法。
这是一个老问题。执行此操作的现代方法是使用 event.key。请参阅MDN 密钥
我认为你应该让 JavaScript 来获取 ':' 字符的键码,这样脚本就会知道它在特定环境中是什么。在 stackoverflow中已经提出了类似的问题。
还请查看此 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 应用程序的浏览器创建的。