JavaScript自定义事件核心是用CustomEvent构造函数创建事件并dispatchEvent派发;支持detail传参、冒泡与取消需显式配置;非DOM对象可继承EventTarget实现;IE9+需createEvent降级。

JavaScript 中实现自定义事件触发,核心是利用 Event 构造函数创建事件对象,再通过 dispatchEvent 方法在目标元素上派发。现代浏览器原生支持,无需依赖框架。
创建并触发基础自定义事件
最简方式是用 CustomEvent 构造函数,它继承自 Event,支持传入自定义数据:
- 用
new CustomEvent('my-event', { detail: { msg: 'hello' } })创建事件,detail是唯一可携带数据的字段 - 调用目标元素(如
document或某个 DOM 节点)的dispatchEvent()方法触发 - 监听时用
addEventListener('my-event', handler),回调中可通过e.detail获取数据
让自定义事件冒泡且可取消
默认情况下 CustomEvent 不冒泡、不可取消。如需类似 click 的行为,需显式配置:
- 构造时传入
{ bubbles: true, cancelable: true } - 在监听回调中调用
e.stopPropagation()阻止冒泡,或e.preventDefault()取消默认行为(虽无默认行为,但语义上表示“被拦截”) - 冒泡路径遵循 DOM 树结构,父级元素可监听到子元素触发的冒泡事件
在非 DOM 对象上使用自定义事件
普通 JS 对象无法直接 dispatchEvent,但可通过组合 EventTarget 实现:
- 让类继承
EventTarget(如class MyEmitter extends EventTarget) - 实例即可调用
this.dispatchEvent(new CustomEvent(...))和this.addEventListener(...) - 注意:Node.js 环境不支持
EventTarget,需用第三方库(如events模块)或手动实现发布订阅
兼容旧版浏览器的写法(IE9+)
IE9–10 不支持 CustomEvent 构造函数,可用以下降级方案:
- 用
document.createEvent('CustomEvent')创建事件对象 - 调用
initCustomEvent(type, bubbles, cancelable, detail)初始化 - 后续 dispatch 方式相同,但写法略繁琐,建议仅在必须支持老 IE 时使用
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南











