操作系统独立键盘事件到字符映射



显然,web应用程序需要根据用户的键盘设置进行调整,对吗?是否有一种方法可以告诉Dojo连接到实际的KeyPress事件而不是KeyDown,这样我们就可以从event.charCode获得字符类型?

由于我们生活在一个国际化的世界,有多种操作系统等等,这些信息不足以找出用户实际输入的字符,除非我在浏览器中内置了一些功能来询问操作系统。

作为一个例子,在Linux上的德语键盘上,通过Alt Gr-8到达[,它发送一个Alt键,然后发送一个[键。好吧,忽略第一部分。在使用德语键盘的windows系统上,第二个事件是ctrlKey和altKey设置为true的8。我不认为JavaScript代码应该解释硬编码,因为与其他键盘设置,这个键组合实际上意味着一个不同的字符。

作为另一个例子(可能没有连接到Dojo,而是一个不同的程序员的小故障,抱歉的大喊大叫…),在mac上使用美国键盘,你不能在outlook web界面中输入德语字符-因为outlook虚假地(!)劫持了alt键(在mac上专门用于修改输入的字符)来触发操作,alt-s因此被重新映射为表示发送。当然,通常是在单词中间。

event.charCode包含由键盘按下产生的字符,而不是实际按下的键。

https://developer.mozilla.org/en/DOM/event.charCode笔记

在按键事件中,按下的键的Unicode值存储在keyCode或charCode属性中,而不是同时存储在两者中。如果按下的键产生一个字符(例如:'a'), charCode被设置为该字符的代码,考虑到字母大小写

edit:也请参阅https://developer.mozilla.org/en/Gecko_Keypress_Event,它包含了关于charCode如何工作的更有见地的解释(特别是在Gecko中,但其中一些也适用于其他浏览器)。您可能会觉得这很有趣:

…当当前选择的键盘布局产生一个Unicode字符(根据CapsLock和NumLock的当前状态)时,charCode属性包含该字符

您可以将传递给dojo.connect()的第5个dontFix参数设置为true,这告诉它让它按原样通过,而不进行特殊处理。看到https://github.com/dojo/dojo/blob/master/_base/connect.js L32

使用keypress事件,其目的是为您提供有关用户键入的字符的信息。你需要(奇怪的)keyCode属性在IE和which属性在其他浏览器;这些给你键入的字符代码。

JavaScript关键事件的权威页面:http://unixpapa.com/js/key.html

document.onkeypress = function(e) {
    e = e || window.event;
    var charCode = (typeof e.which == "number") ? e.which : e.keyCode;
    alert(String.fromCharCode(charCode));
};

相关内容

  • 没有找到相关文章

最新更新