1

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

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

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

再举一个例子(可能没有连接到 Dojo,而是其他程序员的小故障,对咆哮感到抱歉……),在 mac 上使用美式键盘时,您无法在 Outlook Web 界面中键入德语字符 ß - 因为 Outlook 伪造( !) 劫持 alt 键(在 mac 上专门用于修改键入的字符)以触发操作,因此 alt-s 被重新映射为发送。当然,通常在一个单词的中间。

4

3 回答 3

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 属性包含该字符

于 2011-09-01T09:05:00.593 回答
1

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

于 2011-09-01T10:14:49.790 回答
0

使用keypress事件,其目的是为您提供有关用户键入的字符的信息。您将(奇怪地)需要keyCodeIE 中的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));
};
于 2011-09-01T09:50:28.180 回答