Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/378.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript:不同浏览器上的不同键码?_Javascript_Keycode - Fatal编程技术网

Javascript:不同浏览器上的不同键码?

Javascript:不同浏览器上的不同键码?,javascript,keycode,Javascript,Keycode,所以我在论坛上看到了一些关于不同浏览器报告不同键码的帖子,但每个人似乎都在回避“为什么?” 我试图捕获冒号(:)键码,并意识到Firefox会返回e.keyCode 56。而Chrome报告了186条(我想这就是事实) 是否有一种统一的方法可以在所有浏览器中获得正确的键码 如果它们是相同的钥匙,为什么它们会不同呢 我更好奇的是,是否有一种国际性的方式来获得相同的按键 谢谢。请参阅以了解为什么它们有不同的键。我不知道有哪种国际方法可以匹配按键。这取决于您是否对用户按下的物理键或用户键入的字符感兴趣

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

我试图捕获冒号(:)键码,并意识到Firefox会返回e.keyCode 56。而Chrome报告了186条(我想这就是事实)

是否有一种统一的方法可以在所有浏览器中获得正确的键码

如果它们是相同的钥匙,为什么它们会不同呢

我更好奇的是,是否有一种国际性的方式来获得相同的按键


谢谢。

请参阅以了解为什么它们有不同的键。我不知道有哪种国际方法可以匹配按键。

这取决于您是否对用户按下的物理键或用户键入的字符感兴趣。如果它是你想要的角色,你可以在所有主流浏览器中可靠地获得它(在大多数浏览器中使用
keypress
event的
属性,或者在IE中使用
keyCode
,我认为应该使用JavaScript来获取“:”字符的键码,这样脚本就会知道在特定环境中它是什么。也有人问过类似的问题。

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

也可以查看这个GitHub文件:关于如何使用keyDown而不是keyPress事件

我用它做了一个移动设备上带有键盘楔块的条形码扫描器,它在返回时有一个错误(按键)用于扫描连字符的数据。效果非常好。除了在使用常规键盘的浏览器中测试应用程序外,我注意到连字符在Chrome上有效,但在Firefox上无效。奇怪但正确。通过在上述JS文件中添加代码173以及代码189修复


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

我包含的链接的结论部分包含一些可能帮助您实现通用解决方案的信息,这取决于您的情况。您链接我的文章很好。@galambalazs,此图表确实如此不考虑冒号和分号。这让我感到惊讶。PPK通常位于这类东西的顶部。有冒号和分号,看起来非常详尽。KeyEvent(因此也有keyCodes)是。这不是为什么不同的浏览器报告不同的键码的答案,而是一个指向未来可能是一个好解决方案的指针。潜在的.charCode!=keyCode,除了/[a-Z 0-9]/@Nathanbuna:我知道。但是,在旧IE的
keypress
事件中,
keyCode
令人困惑地是字符代码,而不是关键代码,而且所有其他主流浏览器都支持
,所以
keyCode
只在旧IE中使用。请阅读(如我答案中的链接所示).Ick.旧IE又来袭了。谢谢你的解释!这仍然是当前的方式,考虑到Key还在草稿中,而且大多数移动浏览器都不支持适合你自己,这已经不远了。值得注意的是,最受欢迎的移动浏览器Chrome for android已经完全支持了。最大的问题是iOS和Safari虽然Safaris的支持将在下一个版本中提供。我建议您使用多种可用的多边形填充中的一种。实际上,您可以使用它。大多数使用的浏览器都支持它。()如果属性未定义,您仍然可以使用一个小的回退功能。但是,请注意,在某些现代浏览器中存在差异。例如,在数字键盘上按点键(
/
Del
)并在数字锁定的情况下,在Edge中将event.key报告为“Del”,但将其报告为“在Chrome上。人们一直认为Safari是新的Internet Explorer。最近我想知道Edge是否真的是新的Internet Explorer。哦,等等。
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!");
    }
};