我正在实现一个写入文本节点的键盘处理程序,我很难理解如何处理特殊字符的情况,例如å或á< / em>甚至è,通常根据浏览器使用的是这样的:
function stringFromKeyPress(event) {
if (event.which === null || event.which === undefined) {
return String.fromCharCode(event.keyCode); // IE
}
if (event.which !== 0 && event.charCode !== 0) {
return String.fromCharCode(event.which); // the rest
}
return null; // special key
}
然后从返回的值我将字符插入文本节点,它对普通字符完全正常工作导致某些浏览器返回的keyCode或charCode完全转换为 String.fromCharCode(代码)的Unicode字符)接受。但我遇到的问题是死键或当我必须制作一个复合组合时,例如当我按下重音符(')然后按键(a)我希望结果是á然而浏览器使用keyCode 221激活(')的一个keyup和down事件,然后当我按下(a)时,它会触发keydown-&gt; keypress-&gt; keyup正常序列( a)keydown / up的代码65和keypress的97.
我的问题是如何处理死键组合组合?我如何告诉浏览器当我按下严重的重音以等待即将发生的可能有效的键以及是否输入它时?
如果您需要其他详细信息,我希望我的解释清楚。
答案 0 :(得分:0)
好的,我找到了一个解决方法,它不是最好的解决方案,但它现在可以使用,直到UIEvents(http://www.w3.org/TR/DOM-Level-3-Events/)得到广泛实施,并且对这类问题的更多支持来自浏览器。
我所做的是创建一个不透明度设置为0的文本区域,捕获该textarea上的keyup事件,然后在每个事件上从textarea获取值并将其放在我想要的位置(在DOM中的节点中)树)之后将textarea的值清除为“”。
虽然它不是最好的解决方案,但是当UIEvents不在这里时,它可以满足我的需要。