Javascript - 检测Google文档等中文字符输入

时间:2012-01-23 15:55:52

标签: javascript gwt input user-input cjk

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

,在Mac / Firefox上使用简体中文pinyan 然后点击1

我只接收'n'的keydown事件和'1'的键。没有触发按键事件。注意:我正在使用GWT,但我认为这不重要。

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

Google文档如何知道输入语言已更改为中文?例如,如果我的输入语言是英语并且我输入'n',则它不会附加到该隐藏的iframe。是否有检测中文字符键事件的常用技巧?

2 个答案:

答案 0 :(得分:1)

当用户使用IME(输入法编辑器)输入文本时,在输入字段的内容发生变化之前,IME合成窗口中会发生很多交互。您可以通过compositionstartcompositionend事件检测到这一点。事实上,虽然组合正在进行中,但你确实想要从IME中窃取keyup / keydows事件。在文本输入元素上,您可以在内容通过input事件更改时捕获。

答案 1 :(得分:0)

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

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