用于强调字符的 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 键盘处理程序的主要内容,如果未能解决你的问题,请参考以下文章