用于强调字符的 Javascript 键盘处理程序

Posted

技术标签:

【中文标题】用于强调字符的 Javascript 键盘处理程序【英文标题】:Javascript keyboard handler for accentuated characters 【发布时间】:2015-08-06 11:30:31 【问题描述】:

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

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 ) 接受。但是我遇到的问题是死键或者当我必须进行复合组合时,例如当我按下重音(´)然后按下键(a)时,我期望结果是 á 但是,浏览器会使用 keyCode 221 为 (´) 触发一个 keyup 和 down 事件,然后当我按下 (a) 时,它会使用 (a) 触发 keydown->keypress->keyup 正常序列代码 65 用于 keydown/up 和 97 用于按键。

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

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

【问题讨论】:

【参考方案1】:

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

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

虽然它不是最好的解决方案,但它可以在 UIEvent 不存在时满足我的需要。

【讨论】:

以上是关于用于强调字符的 Javascript 键盘处理程序的主要内容,如果未能解决你的问题,请参考以下文章

JavaScript 字符串用于存储和处理文本

10.3 键盘事件

javascript 到 actionscript 按键传递实用程序?

如何处理JSON中的特殊字符

浅谈javascript面向对象

浅谈javascript面向对象