在 Javascript 中按下输入之前检测 IME 输入
Posted
技术标签:
【中文标题】在 Javascript 中按下输入之前检测 IME 输入【英文标题】:Detecting IME input before enter pressed in Javascript 【发布时间】:2011-11-11 03:02:06 【问题描述】:我什至不确定这是否可能,如果这是一个愚蠢的问题,请道歉。
我已经通过 jQuery 设置了一个 keyup
回调,以便在用户在输入框中键入时运行一个函数。它适用于英语。
但是,当输入日文/韩文/中文文本时,在用户确认其文本之前不会调用该函数。
是否可以检测到他们已经开始输入,并访问他们尚未完成的文本?
我在想这可能是操作系统级别的东西,所以 javascript 无法访问它。
编辑:我刚刚意识到这适用于 Chrome 和 Safari,但不适用于 Firefox(还没有机会在 Windows 上尝试)。因此 Chrome 调用 keyup 并且可以获取文本。但是我在Firefox中仍然遇到上述问题。
【问题讨论】:
【参考方案1】:compositionstart
、compositionupdate
和 compositionend
事件 可能会有所帮助。
它们可以帮助您检测何时使用 IME 输入。
例如,考虑使用 IME 以日语输入か (ka)。 将触发以下事件(按显示的顺序):
k(IME 可见)keydown、compositionstart、compositionupdate、compositionend、输入 a(IME 可见)、compositionstart、compositionupdate、compositionend、输入 enter(IME 关闭)keydown,输入请注意,仅当 IME 可见时(在按下 enter 之前)才会触发合成事件。还要注意 keypress 事件没有被触发。这仅针对非 IME 输入触发。
要访问用户未完成的文本,您可以使用事件的data
属性。
$('#input').on('compositionupdate', function(e)
console.log(e.data);
);
有关更多信息,请参阅 MDN:compositionstart、compositionupdate、compositionend、InputEvent。
【讨论】:
更改为按键对我来说效果很好。谢谢!【参考方案2】:这是 Firefox 中的known issue,浏览器应该做什么isn't clear。
解决此问题的一种可能方法是demonstrated here,其中轮询文本字段以查找文本更改(而不是依赖事件)。
【讨论】:
以上是关于在 Javascript 中按下输入之前检测 IME 输入的主要内容,如果未能解决你的问题,请参考以下文章
在 JS/JQuery 中按 ENTER 键之前,如何仅捕获您在文本区域中输入的行? [复制]