【问题标题】:Detecting IME input before enter pressed in Javascript在 Javascript 中按下输入之前检测 IME 输入
【发布时间】:2011-11-11 03:02:06
【问题描述】:

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

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

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

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

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

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

【问题讨论】:

    标签: javascript unicode localization ime


    【解决方案1】:

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

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

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

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

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

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

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

    【讨论】:

    • 更改为按键对我来说效果很好。谢谢!
    【解决方案2】:

    这是 Firefox 中的known issue,浏览器应该做什么isn't clear

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-12-24
      • 1970-01-01
      • 2010-11-16
      • 2019-08-25
      • 2012-01-31
      相关资源
      最近更新 更多