【问题标题】:Javascript - Detecting chinese character input like Google docsJavascript - 检测像谷歌文档这样的中文字符输入
【发布时间】:2012-01-23 15:55:51
【问题描述】:

我正在尝试可靠地检测何时将中文字符插入到文本框中。如果我将 keyup、keydown 和 keypress 处理程序添加到输入字段,则当用户从 IME(输入法编辑器)中选择中文字符时不会触发任何事件。例如,在带有简体中文拼音的 Mac/Firefox 上,如果我输入:

ni 然后点击 1

我只收到 'n' 的 keydown 事件和 '1' 的 key up。没有按键事件被触发。注意:我正在使用 GWT,但我认为这无关紧要。

我很好奇 Google 文档是如何做到这一点的。我特别注意到对于中文,“n”字符作为文本附加到具有“docs-texteventtarget-iframe”类的隐藏 iframe(但不是“i”)。我想他们这样做是为了检测何时插入了汉字。

Google 文档如何知道输入语言已更改为中文?例如,如果我的输入语言是英语并且我输入了“n”,则它不会附加到那个隐藏的 iframe。有没有常用的检测汉字按键事件的技术?

【问题讨论】:

  • 您是否尝试添加更改处理程序?

标签: javascript gwt input user-input cjk


【解决方案1】:

当用户使用 IME(输入法编辑器)输入文本时,在输入字段的内容发生变化之前,在 IME 合成窗口中进行了大量交互。您可以通过compositionstartcompositionend 事件检测到这一点。事实上,在合成过程中,您肯定想从 IME 中窃取 keyup/keydows 事件。然后,您可以在文本输入元素上通过 input 事件捕捉内容何时发生变化。

【讨论】:

    【解决方案2】:

    我怀疑您没有收到按键事件,因为输入来自 IME 而不是键盘,就像您粘贴到字段中时不会收到按键事件一样。

    您可以尝试将ValueChangeHandler 添加到文本框以查看是否捕获了您正在查找的事件。

    【讨论】:

      猜你喜欢
      • 2014-07-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-12-31
      • 1970-01-01
      • 1970-01-01
      • 2012-04-18
      • 1970-01-01
      相关资源
      最近更新 更多