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

时间:2011-09-06 08:20:57

标签: javascript unicode localization ime

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

我通过jQuery设置了一个keyup回调来在用户输入输入框时运行一个函数。它对英语很好。

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

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

我想也许这是操作系统级的事情,所以Javascript无法访问它。

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

2 个答案:

答案 0 :(得分:13)

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

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

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

请注意,仅当IME可见时(在按下 enter 之前)才会触发compositon事件。另请注意, keypress 事件未触发。这仅针对非IME输入触发。

要访问用户未完成的文字,您可以使用活动的data属性。

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

有关详细信息,请参阅MDN:compositionstartcompositionupdatecompositionendInputEvent

答案 1 :(得分:5)

这是Firefox中的known issue,以及 应该}的浏览器。

解决此问题的一种可能方法是isn't clear,其中对文本字段进行轮询以查看文本的更改(而不是依赖于事件)。