在Javascript中输入之前检测IME输入

Ben*_*eys 8 javascript unicode localization ime

我甚至不确定这是否可行,如果这是一个愚蠢的问题,请道歉.

keyup当用户输入输入框时,我通过jQuery 设置回调来运行一个函数.它适用于英语.

但是,当输入日文/韩文/中文文本时,在用户确认其文本之前不会调用该功能.

是否有可能检测到他们已经开始输入,并访问他们尚未完成的文本?

我想也许这是一个操作系统级别的东西,所以Javascript无法访问它.

编辑:我刚刚意识到这适用于Chrome和Safari,但不适用于Firefox(还没有机会在Windows上试用).因此,Chrome会调用keyup,因此可以获取文本.但我仍然在Firefox中遇到上述问题.

Jam*_*son 15

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

例如,考虑使用IME在日语中键入か(ka).
将触发以下事件(按所示顺序):

  • k(IME可见)keydown,compositionstart,compositionupdate,compositionend,input
  • a(IME可见),compositionstart,compositionupdate,compositionend,输入
  • enter (IME关闭)keydown,输入

请注意,仅当IME可见时(enter按下之前)才会触发组合事件.另请注意,未触发按键事件.这仅针对非IME输入触发.

要访问用户的未完成文本,您可以使用data事件的属性.

$('#input').on('compositionupdate', function(e) {
    console.log(e.data);
});
Run Code Online (Sandbox Code Playgroud)

有关更多信息,请参阅MDN:compositionstart,compositionupdate,compositionend,InputEvent.


一二三*_*一二三 5

这是Firefox中的一个已知问题,浏览器应该做的事情并不清楚.

这里演示了一种解决此问题的可能方法,其中轮询文本字段以更改文本(而不是依赖于事件).