13.4.5 复合事件
优质
小牛编辑
130浏览
2023-12-01
复合事件(composition event)是DOM3 级事件中新添加的一类事件,用于处理IME 的输入序列。
IME(Input Method Editor,输入法编辑器)可以让用户输入在物理键盘上找不到的字符。例如,使用拉丁文键盘的用户通过IME 照样能输入日文字符。IME 通常需要同时按住多个键,但最终只输入一个字符。复合事件就是针对检测和处理这种输入而设计的。有以下三种复合事件。
- compositionstart:在IME 的文本复合系统打开时触发,表示要开始输入了。
- compositionupdate:在向输入字段中插入新字符时触发。
- compositionend:在IME 的文本复合系统关闭时触发,表示返回正常键盘输入状态。
复合事件与文本事件在很多方面都很相似。在触发复合事件时,目标是接收文本的输入字段。但它比文本事件的事件对象多一个属性data,其中包含以下几个值中的一个:
- 如果在compositionstart 事件发生时访问,包含正在编辑的文本(例如,已经选中的需要马上替换的文本);
- 如果在compositionupdate 事件发生时访问,包含正插入的新字符;
- 如果在compositionend 事件发生时访问,包含此次输入会话中插入的所有字符。
与文本事件一样,必要时可以利用复合事件来筛选输入。可以像下面这样使用它们:
var textbox = document.getElementById("myText"); EventUtil.addHandler(textbox, "compositionstart", function(event) { event = EventUtil.getEvent(event); alert(event.data); }); EventUtil.addHandler(textbox, "compositionupdate", function(event) { event = EventUtil.getEvent(event); alert(event.data); }); EventUtil.addHandler(textbox, "compositionend", function(event) { event = EventUtil.getEvent(event); alert(event.data); });
运行一下
IE9+是到2011 年唯一支持复合事件的浏览器。由于缺少支持,对于需要开发跨浏览器应用的开发人员,它的用处不大。要确定浏览器是否支持复合事件,可以使用以下代码:
var isSupported = document.implementation.hasFeature("CompositionEvent", "3.0");