如何理解JavaScript的自定义事件?如何触发CustomEvent?
发布于 作者:苏南大叔 来源:程序如此灵动~

回归本源,本文讨论javascript
的自定义事件的问题,测试的范围限于浏览器环境。纯node
环境情况下,目前不做考虑范围内。使用的是new CustomEvent()
对象,具体来说,演示了事件名称e.type
和事件数据e.detail
两个属性。

大家好,这里是苏南大叔的“程序如此灵动”博客,记录苏南大叔和计算机代码的故事。本文测试环境:chrome@130.0.6723.92
。
jquery版本事件
最容易接受的自定义事件的写法方式,就是jquery
的.on()
和.bind()
绑定事件写法,解除绑定使用的是.unbind()
。触发事件使用的是.trigger()
。
测试代码:

参考文章:
原生版本事件CustomEvent
原生的浏览器事件里面,使用的是.addEventListener()
进行事件绑定,然后使用.removeEventListener()
解除绑定。事件的触发使用的是:.dispatchEvent()
。这里使用了一个CustomEvent()
类是事件对象进行了包装。
测试代码:
注意这里的所有的自定义数据,都只能放在.detail
属性里面。放在别的名字的属性的话,会无法识别出来。就是说,只有一个.detail
是预留的槽位!

参考文章:
- https://newsn.net/say/js-event-listener.html
- https://newsn.net/say/js-event-order.html
- https://newsn.net/say/js-event-target.html
表格总结对比
方案 | 绑定 | 解绑 | 触发事件 | 事件对象 |
---|---|---|---|---|
jquery | .on()/.bind() | .unbind() | .trigger() | {type,[data]} |
原生 | .addEventListener() | .removeEventListener() | .dispatchEvent() | new CustomEvent(type, {detail:data}) |
可见,在jquery
版本的自定义事件中,事件本身就是个普通的{}
。而原版的浏览器支持的自定义事件当中,存在一个CustomEvent()
类,并且参数数据,也被隐藏到了.detail
属性里面。
结束语
本文引入了一个新的对象CustomEvent()
,本文仅仅使用了其事件名称和事件数据两个功能。其实有更多的参数,待以后发掘。


