2011-09-06 144 views
6

之前输入压我甚至不知道这是可能的,所以道歉,如果这是一个愚蠢的问题。检测IME输入的Javascript

我已经成立了一个keyup通过回调jQuery的运行功能,当用户键入一个输入框。它适用于英语。

然而,当日本/韩国/中国,函数输入文本不叫,直到用户确认他们的文字。

是否有可能发现,他们已经开始打字,并访问他们的作为,尚未完成的文本?

我想,也许这是一个操作系统级的事情,所以JavaScript并没有对它的访问。

编辑:我刚刚意识到,这适用于Chrome和Safari,但不是在Firefox(没有机会在Windows上尝试它)。因此,Chrome调用了关键字并且可以获取文本。但我仍然在Firefox中遇到上述问题。

回答

5

这是Firefox中的known issue和什么浏览器应该在做isn't clear

为解决此问题,工作一个可能的方法是demonstrated here,其中的文本字段进行轮询以更改文本(而不是依赖于事件)。

11

compositionstart,compositionupdatecompositionend事件可能会有所帮助。 它们可帮助您检测何时使用IME输入。

例如,考虑使用IME在日语输入か(ka)定义。
下列事件(在所示出的顺序)将被触发:

  • ķ(IME可见)的keydown,compositionstartcompositionupdatecompositionend,输入
  • 一个( IME可见),compositionstartcompositionupdate组合大ionend,输入
  • 进入(IME关闭)的keydown,输入

注意,compositon事件时,IME是可见的(前进入按下),仅启动。另外请注意,按键事件未被触发。这只是针对非IME输入才开启的。

要访问用户的未完成的文本,您可以使用事件的data财产。

$('#input').on('compositionupdate', function(e) { 
    console.log(e.data); 
}); 

欲了解更多信息请参见MDN:compositionstartcompositionupdatecompositionendInputEvent