我正在实现一个编写文本节点的键盘处理程序,我很难理解如何处理特殊字符的情况,例如å或á甚至è等特殊字符,通常我会根据浏览器使用什么是这样的:
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(code)接受的 Unicode 字符。但是我遇到的问题是死键或者当我必须进行复合组合时,例如当我按下重音 (´) 然后按下键 (a) 我希望结果是á然而浏览器使用 keyCode 221 为 (´) 触发一个 keyup 和 down 事件,然后当我按下 (a) 时,它会触发 keydown->keypress->keyup 正常序列,使用 (a) 代码 65 进行 keydown/up 和97 按键。
我的问题是如何处理死键组合组合?我如何告诉浏览器,当我按下重音以等待即将到来的可能有效的键以及是否输入它时?
我希望我的解释很清楚,如果您需要更多详细信息,请询问。