我写过a text editor in JavaScript that draws directly to a Canvas element(出于各种原因,但我的主要原因是我可以将画布作为纹理拍到WebGL网格上)。令人高兴的是,我发现任何可以编辑内容的解决方案都比较容易实现。
我早期注意到的一件事是来自键盘布局的人的投诉,而不是美国QWERTY,有些键显示不正确的字母。经过一番摆弄Windows'在语言设置和屏幕键盘上,我创建了一个基于代码页的解决方案,可以直接将keyCodes映射到不同语言环境的字符串,而不仅仅是假设没有修饰键的keyCode 51是数字3和#34;。因为它不是,在某些键盘上它是双重的。
但仍有一些奇怪之处。一些例子(请注意,所有这些示例都基于使用Windows屏幕键盘,所以我只假设这与现实相关):
前两个问题是最大的问题。如果我只知道应该是什么行为,我可以找出解决方案。第三个问题将适合我的代码页系统,但我必须改变我读取修饰键的方式。最后一个问题,我可能会付钱给别人。
我很好,无法在所有浏览器中100%的时间内为所有用户解决问题。但我所遇到的大部分信息基本上都是“不要打扰”,这听起来更像是&#34;我不知道&#34;。< / p>
编辑:选择布局不是问题。如果事情不适合用户,我会将其作为选项提供给用户。我认为这是关于在这种情况下可以做的最好的事情,但显然我会自动检测我是否可以。鉴于已经选择了正确的布局,我真的只关心获得正确的行为。
我想避免涉及keyPress事件的任何事情,因为它不是完全可靠的。如果我在键盘布局上有可靠的数据来源,那就不是问题了。
答案 0 :(得分:8)
您无法获得键盘布局......
没有办法(使用纯JS解决方案)来检测用户的键盘布局。
注意&#34; en-US&#34;或&#34; en-GB&#34;没有映射到这些语言的任何特定/约定的键盘布局。用户的语言与其键映射到角色的方式无关。
您可以根据locale / language code进行假设,但这并不能提供任何保证 - 只会增加您为适当布局提供服务的可能性。
另见这些问题:
Translate Javascript keyCode into charCode for non-U.S. keyboard layout (i.e. azerty)
Detect keyboard layout with javascript
...但您可以使用它输入字符:
但是,根据您所需的浏览器支持(使用画布,应该相当不错),您可以尝试使用charCode
属性:
http://www.w3schools.com/jsref/event_key_charcode.asp
var unicodeCharCode = e.charCode;
请注意,这不会返回实际字符 - 您将获得代表它的数字(不是键):
Unicode字符代码是字符的编号(例如 数字&#34; 97&#34;代表字母&#34; a&#34;)。
您可以根据需要轻松地将这些代码映射到字符,或者只使用内置函数:
var userInput = String.fromCharCode(unicodeCharCode);
替代方法:
用作解决方法的一个建议是使用隐藏(或至少离散)的文本输入/文本框,您的应用设置重点关注。
当您的应用检测到按键/按键等时,您可以获取用户输入的值并在画布上进行渲染。
当您已经捕获键盘事件时,处理组合应该很容易(如果需要)。在某些方面甚至不需要,因为您只需要监控用户输入的输入长度(如果用户需要三键组合输入字符,您的应用程序不必关心,你抓住结果吧。