10

我什至不确定这是否可能,所以如果这是一个愚蠢的问题,请道歉。

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

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

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

我在想这可能是操作系统级别的东西,所以 Javascript 无法访问它。

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

4

2 回答 2

20

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

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

  • k(IME 可见)keydown、compositionstartcompositionupdatecompositionend、input
  • a(IME 可见)、compositionstartcompositionupdatecompositionend、 input
  • enter(IME 关闭)keydown,输入

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

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

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

有关更多信息,请参阅 MDN:compositionstartcompositionupdatecompositionendInputEvent

于 2016-05-08T12:08:52.017 回答
5

这是Firefox中的一个已知问题,目前尚不清楚浏览器该做什么。

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

于 2011-09-07T10:12:55.130 回答