用于输入中文的 JQuery/DOM 事件(ibus)?

问题描述 投票:0回答:3

我们知道,当我们打字时,会触发很多事件。

例如 keyup、keydown、keypress 或其他。

是否有其他事件只有在文本字段的内容改变时才会触发?如果没有,如何编写一些javasrcipt代码来完成这个功能

javascript jquery dom cjk ime
3个回答
2
投票

change 活动可能有帮助吗?


0
投票

我创建了一个简单的小提琴来确定当通过按键修改 contenteditable 元素中的文本节点时会发生什么。当我这样做时,我决定检查使用 ibus 时会发生什么,因为我将 ibus 用于我自己的工作。我确定,当使用 ibus 时,生成的唯一键盘事件是具有

which
值的 keyup 事件,这是无用的。

这是我创建的小提琴:

http://jsfiddle.net/lddubeau/jWnL3/

  1. 去那个小提琴。

  2. 打开 Javascript 控制台。

  3. 点击运行。

  4. 在单词“toto”的第 2dn 和第三个字符之间单击。

  5. 使用 ibus 输入内容。例如,输入我。

  6. 输出因您的浏览器而异。在 Chrome 29 上,每个击键都会被记录,因此如果我使用tonepy 方法输入“我”,我会得到每个“w”“o”“3”和“1”的 keyup 和 keydown。 (拼音,声调,然后按1选择第一个选项。)最终的事件是:

    event type: keyup
    which: 229
    keyCode: 229
    charCode: 0
    node value: 
       to我to
    

    在此之前的事件都具有相同的值,除了有些是“keydown”类型,当然节点值显示“toto”,直到最后一个事件。

    在 Firefox 23 上仅注册一个事件:

    "event type:" "keyup"
    "which:" 49
    "keyCode:" 49
    "charCode:" 0
    "node value:" "
        to我to
    "
    

    不生成按键或按键事件。 (当输入 ASCII 范围内的字符时,每个键都会得到 keydown、keypress 和 keyup。)

which 和 keyCode 的值似乎与任何合理的值都不对应。我检查了传递给事件处理程序的事件对象,没有看到任何表明用户刚刚键入“我”的字段。


0
投票

如果您处理中文输入并且对输入拼音等时触发

change
事件的中间输入不感兴趣,那么您可能需要研究
compositionstart
compositionend
事件。这些在composition的开始和结束时被触发。

甚至拉丁字符也可以触发构图。例如,在 iOS 上书写 ` 时,反引号字符会显示下划线,表示需要第二个字符才能完成输入。选择 e 会触发

compositionend
事件,并将
event.data
设置为
è

键盘事件上还有一个

isComposing
属性,例如
keydown
keyup
,指示输入是否是组合的一部分。

请注意,您可能必须组合不同的事件才能获得您想要的效果。也许通过使用

compositionstart
compositionend
来跟踪组合是否正在发生并忽略组合内触发的更改事件。

© www.soinside.com 2019 - 2024. All rights reserved.