我们知道,当我们打字时,会触发很多事件。
例如 keyup、keydown、keypress 或其他。
是否有其他事件只有在文本字段的内容改变时才会触发?如果没有,如何编写一些javasrcipt代码来完成这个功能
change 活动可能有帮助吗?
我创建了一个简单的小提琴来确定当通过按键修改 contenteditable 元素中的文本节点时会发生什么。当我这样做时,我决定检查使用 ibus 时会发生什么,因为我将 ibus 用于我自己的工作。我确定,当使用 ibus 时,生成的唯一键盘事件是具有
which
值的 keyup 事件,这是无用的。
这是我创建的小提琴:
http://jsfiddle.net/lddubeau/jWnL3/
去那个小提琴。
打开 Javascript 控制台。
点击运行。
在单词“toto”的第 2dn 和第三个字符之间单击。
使用 ibus 输入内容。例如,输入我。
输出因您的浏览器而异。在 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 的值似乎与任何合理的值都不对应。我检查了传递给事件处理程序的事件对象,没有看到任何表明用户刚刚键入“我”的字段。
如果您处理中文输入并且对输入拼音等时触发
change
事件的中间输入不感兴趣,那么您可能需要研究 compositionstart
和 compositionend
事件。这些在composition的开始和结束时被触发。
甚至拉丁字符也可以触发构图。例如,在 iOS 上书写 ` 时,反引号字符会显示下划线,表示需要第二个字符才能完成输入。选择 e 会触发
compositionend
事件,并将 event.data
设置为 è
。
键盘事件上还有一个
isComposing
属性,例如 keydown
和 keyup
,指示输入是否是组合的一部分。
请注意,您可能必须组合不同的事件才能获得您想要的效果。也许通过使用
compositionstart
和 compositionend
来跟踪组合是否正在发生并忽略组合内触发的更改事件。