我甚至不确定这是否可行,如果这是一个愚蠢的问题,请道歉。
我通过jQuery设置了一个keyup
回调来在用户输入输入框时运行一个函数。它对英语很好。
但是,当输入日文/韩文/中文文本时,在用户确认其文本之前不会调用该函数。
是否有可能检测到他们已经开始输入,并访问他们尚未完成的文本?
我想也许这是操作系统级的事情,所以Javascript无法访问它。
编辑:我刚才意识到这适用于Chrome和Safari,但不适用于Firefox(还没有机会在Windows上试用)。因此,Chrome会调用keyup,因此可以获取文本。但我仍然在Firefox中遇到上述问题。
答案 0 :(得分:13)
compositionstart
,compositionupdate
和compositionend
事件可能会有所帮助。
它们可以帮助您检测何时使用IME输入。
例如,考虑使用IME在日语中键入か(ka) 将触发以下事件(按所示顺序):
请注意,仅当IME可见时(在按下 enter 之前)才会触发compositon事件。另请注意, keypress 事件未触发。这仅针对非IME输入触发。
要访问用户未完成的文字,您可以使用活动的data
属性。
$('#input').on('compositionupdate', function(e) {
console.log(e.data);
});
有关详细信息,请参阅MDN:compositionstart,compositionupdate,compositionend,InputEvent。
答案 1 :(得分:5)
这是Firefox中的known issue,以及 应该3>}的浏览器。
解决此问题的一种可能方法是isn't clear,其中对文本字段进行轮询以查看文本的更改(而不是依赖于事件)。