Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/420.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 独立于操作系统的键盘事件到字符映射_Javascript_Dojo_Keyevent_Os Dependent - Fatal编程技术网

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

Javascript 独立于操作系统的键盘事件到字符映射,javascript,dojo,keyevent,os-dependent,Javascript,Dojo,Keyevent,Os Dependent,显然,web应用程序需要根据用户的键盘设置进行调整,对吗?有没有办法告诉Dojo连接到实际的按键事件而不是KeyDown,这样我们就可以从event.charCode中键入字符 因为我们生活在一个国际化的世界,有多种操作系统,而不是什么,这些信息不足以找出用户实际键入的字符,除非我在浏览器中内置了一些功能来询问操作系统 例如,在Linux上的德语键盘上,[是通过Alt Gr-8访问的,Alt Gr-8为Alt发送一个向下键,然后使用[.好吧,忽略第一部分。在使用德语键盘的windows系统上,第

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

因为我们生活在一个国际化的世界,有多种操作系统,而不是什么,这些信息不足以找出用户实际键入的字符,除非我在浏览器中内置了一些功能来询问操作系统

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


另一个例子是(可能没有连接到Dojo,而是另一个程序员的小故障,很抱歉这么说…),在mac上使用美国键盘,您不能在outlook web界面中键入德语字符ß–因为outlook Bogly(!)劫持了alt键(mac上的alt键专门用于修改键入的字符)触发动作和ALT-S因此被重新映射为平均发送。当然,在单词的中间,当然,

<代码>事件。字符编码< /COD>包含从键盘按压产生的字符,而不是被按下的实际键。

在按键事件中,按下的键的Unicode值存储在keyCode或charCode属性中,不能同时存储在这两个属性中。如果按下的键生成一个字符(例如“a”),charCode将设置为该字符的代码,与字母大小写有关

编辑:另请参见,它对charCode的工作原理进行了更深入的解释(特别是在Gecko中,但其中一些也适用于其他浏览器)。您可能会发现这很有趣:

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


使用
keypress
事件,其目的是为您提供有关用户键入的字符的信息。您(奇怪地)需要IE中的
keyCode
属性和其他浏览器中的
which
属性;这些属性为您键入的字符代码

JavaScript关键事件的最终页面:


您可以将传递给
dojo.connect()
的第5个
dontFix
参数设置为true,这告诉它让它按原样通过,而无需特殊处理。请参见

您当然是对的–这里的问题“只是”那
dojo.connect(foo,“onkeypress”,this.this.onkeypress)
连接到DOM event KeyDown。它发送了错误的值。我将编辑这个问题。@Christopher:Dojo会这样做吗?如果是,那就放弃它。@Tim,很遗憾,我不会使用Dojo。但我必须查看它们的源代码,看看它们是否真的会用+1来攻击Outlook。这是我使用过的最糟糕的软件之一。
document.onkeypress = function(e) {
    e = e || window.event;
    var charCode = (typeof e.which == "number") ? e.which : e.keyCode;
    alert(String.fromCharCode(charCode));
};