Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/418.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 keydown上的差异正常字符和半字符_Javascript_Macos_Mediawiki_Ime_Wysiwym - Fatal编程技术网

Javascript keydown上的差异正常字符和半字符

Javascript keydown上的差异正常字符和半字符,javascript,macos,mediawiki,ime,wysiwym,Javascript,Macos,Mediawiki,Ime,Wysiwym,我们分叉了实验性Mediawiki VisualEditor。此所见即所得编辑器使用隐藏的文本区域和DOM中的内容表示。当您聚焦视图时,焦点被赋予textarea,并且view listen to keydown事件将每个键入的字符添加到内容中,然后清空textarea的值 只有Mac OS X上的半个字符才会出现此问题。如果您键入^或¨或任何需要打印第二个字符的字符,则会触发keydown事件。所以,当用户想要一个“ê”时,他会键入“^”。查看获取textarea值(“^”)并清除textar

我们分叉了实验性Mediawiki VisualEditor。此所见即所得编辑器使用隐藏的文本区域和DOM中的内容表示。当您聚焦视图时,焦点被赋予textarea,并且view listen to keydown事件将每个键入的字符添加到内容中,然后清空textarea的值

只有Mac OS X上的半个字符才会出现此问题。如果您键入^或¨或任何需要打印第二个字符的字符,则会触发keydown事件。所以,当用户想要一个“ê”时,他会键入“^”。查看获取textarea值(“^”)并清除textarea值。然后,用户输入“e”。视图将显示“^e”。另外,在Chrome上(Firefox在这种情况下更好),用户将永远无法在当前页面的任何输入中键入任何口音,而无需重新加载窗口


有什么方法可以区分真实字符和半个字符吗?

您是从按键按下事件中获取字符,还是从文本区域读取字符? 我只是用一个输入字段尝试了一下,它的值在第一次按“^”按钮时没有改变。但是,我正在使用windows。 最后的办法显然是以不同的方式处理这些修改按键。如果您希望支持像alt+654这样的组合键,这可能会变得有些复杂。
下班回家后,我会在mac电脑上再试一次。

刚刚找到了解决办法。通过监听
keyup
事件,死键返回一个
keyIdentifier
属性,该属性设置为
Unidentified

因此:


您可能想考虑使用“正常”输入字段,并在用户按下Enter时将其内容复制到DOM。编辑器监听KEYDOWN事件,并查看TeTaReaA值。我试过使用keydown、keyup、keypress和value以及e对象。我发现没有什么不同的键…而且在Windows和Linux上一切都很好。只有Mac OS X失败:(我刚刚知道半键有一个真实的名字!它被称为“死键”!相关:,
keyuphandler = function(e)
{
    if (e.keyIdentifier === 'Unidentified')
    {
        return;
    }
    doSomething();
}