国际键盘如何与JavaScript键盘事件一起使用?
我用JavaScript编写了一个直接绘制到Canvas元素的文本编辑器(出于各种原因,但我的主要原因是我可以将该画布作为纹理贴在WebGL网格上)。 令人惊喜的是,实现我找到的任何可编辑内容的解决方案都变得更加容易。
我很早就注意到的一件事是,除了en-US QWERTY以外的键盘布局的人抱怨某些键显示不正确的字母。 在对Windows的语言设置和屏幕键盘进行了一些摆弄之后,我创建了一个基于代码页的解决方案,它将keyCode直接映射到不同语言环境的字符串,而不是假定“没有修饰键的keyCode 51是数字3 ”。 因为它不是,在某些键盘上它是双重的。
但还是有些古怪。 几个例子(请注意,所有这些例子都基于使用Windows屏幕键盘,所以我只是假设这与现实相关):
前两个问题是最大的。 如果我只知道行为应该是什么,我可以找出解决方案。 第三个问题将适合我的代码页系统,但我必须改变我读取修改键的方式。 最后一个问题,我可能会付钱给某人报道。
而且我无法在100%的时间内为所有浏览器中的所有用户解决问题。 但我遇到的大部分信息基本上都是“不要打扰”,这听起来更像“我不知道”。
编辑:选择布局不是一个问题。 如果事情不适合他们,我将它作为用户选项提供。 我认为这是在这种情况下可以做的最好的事情,但显然如果可以的话我会自动检测。 考虑到已经选择了正确的布局,我真的只关心如何获得正确的行为。
我想避免任何涉及keyPress事件的事情,因为它不是完全可靠的。 如果我在键盘布局上有可靠的数据来源,这不会是一个问题。
你无法获得键盘布局...
(用纯JS解决方案)无法检测用户的键盘布局。
请注意,“en-US”或“en-GB”不映射到这些语言的任何特定/同意的键盘布局。 用户的语言与他们的键映射到角色的方式无关。
您可以根据语言环境/语言代码进行假设,但这不能提供任何保证 - 它只会增加您适应适当布局的可能性。
另请参阅以下问题:
将Javascript keyCode转换为非美国键盘布局的charCode(即azerty)
用javascript检测键盘布局
...但你可以得到与它一起输入的字符:
但是,根据您所需的浏览器支持(使用画布,应该是相当不错的),您可以尝试使用charCode
属性:
http://www.w3schools.com/jsref/event_key_charcode.asp
var unicodeCharCode = e.charCode;
请注意,这不会返回实际的字符 - 您会得到表示它的数字(不是关键字):
Unicode字符代码是一个字符的编号(例如数字“97”代表字母“a”)。
您可以根据需要轻松将这些代码映射到字符,或者只使用内置函数:
var userInput = String.fromCharCode(unicodeCharCode);
替代方法:
一个建议用作解决方法是使用隐藏的(或至少离散的)文本输入/文本框,这是您的应用程序集中的焦点。
当您的应用程序检测到按键/按键等时,您可以获取用户输入的值并将其呈现在画布上。
由于您已经捕获了键盘事件,处理组合应该很容易(如果需要的话)。 在某些方面甚至不需要,因为您只需要监视用户输入的输入长度(您的应用程序无需关心用户是否需要三键组合才能输入角色,您只需抓住结果)。
链接地址: http://www.djcxy.com/p/18435.html上一篇: How do international keyboards work with JavaScript keyboard events?