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

标签 javascript dojo keyevent os-dependent

显然,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 被重新映射为表示发送。当然,通常在单词中间。

最佳答案

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

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

In a keypress event, the Unicode value of the key pressed is stored in either the keyCode or charCode property, never both. If the key pressed generates a character (e.g. 'a'), charCode is set to the code of that character, respecting the letter case

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

... when the currently selected keyboard layout produces a Unicode character (according to the current state of CapsLock and NumLock), the charCode property contains that character

关于javascript - 操作系统独立的键盘事件到字符映射,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7268120/

相关文章:

javascript - 如何使用 Dojo Toolkit 将 JSON 对象映射到表单?

dojo - 以编程方式将粗体和字体添加到 dijit/form/select

java - 如何忽略Swing中的按键事件?

javascript - 禁用/启用输入 :date on checkbox click doen't work properly?

javascript - jqgrid 不加载所有行

javascript - 如何在 Dojo 中过滤/查询 FilteringSelect

python - 如何处理Libavg中的KeyEvents?

javascript - 使用中文输入问题计算的 Vue 2 触发器

javascript - 为什么我的 javascript 电子邮件按钮不起作用?我究竟做错了什么?

javascript - 在这种情况下如何使变量全局可访问?