OS独立键盘事件到字符映射

时间:2011-09-01 09:00:27

标签: javascript dojo keyevent os-dependent

显然,Web应用程序需要根据用户的键盘设置进行调整,对吧?有没有办法告诉Dojo连接到实际的KeyPress事件而不是KeyDown,所以我们可以从event.charCode获取字符?

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

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

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

3 个答案:

答案 0 :(得分:2)

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

https://developer.mozilla.org/en/DOM/event.charCode#Notes

  

在按键事件中,按下的键的Unicode值存储在keyCode或charCode属性中,而不是两者都存储。如果按下的键生成一个字符(例如'a'),则charCode设置为该字符的代码,尊重字母大小写

编辑另请参阅https://developer.mozilla.org/en/Gecko_Keypress_Event,其中包含有关charCode如何工作的更具洞察力的解释(特别是在Gecko中,但其中一些也适用于其他浏览器)。你可能会觉得这很有趣:

  

...当当前选定的键盘布局生成Unicode字符时(根据CapsLock和NumLock的当前状态),charCode属性包含该字符

答案 1 :(得分:1)

您可以将传递给dontFix的第五个dojo.connect()参数设置为true,这会告诉它让它在没有特殊处理的情况下直接传递。见https://github.com/dojo/dojo/blob/master/_base/connect.js#L32

答案 2 :(得分:0)

使用keypress事件,其目的是为您提供有关用户键入的字符的信息。你需要(奇怪)IE中的keyCode属性和其他浏览器中的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));
};