加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 资源网站 > 资源 > 正文

JS复合事件

发布时间:2020-12-14 23:48:02 所属栏目:资源 来源:网络整理
导读:看到了element-ui库中的input组件,发现了compositionstart、compositionupdate和compositionend三个事件。代码中并没有直接调用的入口,原来这是DOM3级中的复合事件(特地看了下红皮书,书上是有的)。 一、简介 复合事件是DOM3级事件中新添加的一类事件,

看到了element-ui库中的input组件,发现了compositionstart、compositionupdate和compositionend三个事件。代码中并没有直接调用的入口,原来这是DOM3级中的复合事件(特地看了下红皮书,书上是有的……)。

一、简介

复合事件是DOM3级事件中新添加的一类事件,用于处理IME的输入序列。IME(Input Method Editor,输入法编辑器)可以让用户输入在物理键盘上找不到的字符。复合事件有三种:compositionstart、compositionupdate和compositionend。他比其他文本事件多了个data属性,可以得到输入值。

浏览器兼容方面,需要IE9+的支持。我们可以通过hasFeature准确的判断浏览器是否支持。

document.implementation.hasFeature("CompositionEvent","3.0");

二、对比

我们将这三个事件和常用的三个输入事件keydown、keypress和keyup来做比较。

<input id="ipt" type="text" />
document.getElementById('ipt').onkeydown = function() {
    console.log('keydown');
}
document.getElementById('ipt').onkeypress = function() {
    console.log('keypress');
}
document.getElementById('ipt').onkeyup = function() {
    console.log('keyup');
}
document.getElementById('ipt').addEventListener('compositionstart',function(e) {
    console.log('compositionstart',e.data);
});
document.getElementById('ipt').addEventListener('compositionupdate',function(e) {
    console.log('compositionupdate',e.data);
});
document.getElementById('ipt').addEventListener('compositionend',function(e) {
    console.log('compositionend',e.data);
});

在切换到中文输入法后,输入’你’的拼音ni,控制台打印如下:

《JS复合事件》

显示键盘的keydown事件,随即触发了compostionstart方法,表示输入法开启使用了。当有新的值输入时,会触发对应的update事件,但是没有触发keypress事件,连续输入时,值时keydown,compositionupdate,keyup的连续触发。

当我们用空格键确认时,控制台打印如下:

《JS复合事件》

先触发了composition相关的方法才触发keydown。

使用较快的速度打你好的拼音’nihao’,并用空格确定。控制台打印如下:

《JS复合事件》

composition与key系列事件似乎并没有按序触发,但是拆分开来看。

单看composition,先由start,再到update,最后end以及值的状态,都是正确的。

key的事件则是keydown到keyup,分别对应,不过始终没有触发keypress。

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读