0

我正在实现一个编写文本节点的键盘处理程序,我很难理解如何处理特殊字符的情况,例如åá甚至è等特殊字符,通常我会根据浏览器使用什么是这样的:

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 按键。

我的问题是如何处理死键组合组合?我如何告诉浏览器,当我按下重音以等待即将到来的可能有效的键以及是否输入它时?

我希望我的解释很清楚,如果您需要更多详细信息,请询问。

4

1 回答 1

0

好的,我找到了一种解决方法,它不是最好的解决方案,但它现在可以工作,直到 UIEvents ( http://www.w3.org/TR/DOM-Level-3-Events/ ) 被广泛实施并对此提供更多支持问题类型来自浏览器。

我所做的是创建一个不透明度设置为 0 的文本区域,捕获该 textarea 上的 keyup 事件,然后在每个事件中从 textarea 获取值并将其放在我想要的位置(在我的 DOM 树中的节点中)和之后将 textarea 的值清除为“”。

虽然它不是最好的解决方案,但它适用于我需要它,而 UIEvents 不在这里。

于 2015-08-07T10:55:08.767 回答