js customEvent 创建和触发自定义事件
在日常的 Web 开发中,我们经常与内置的浏览器事件互动,例如 click、input 和 submit。但有时,我们可能希望在特定情境下创建并触发自己的事件。这时,CustomEvent 就派上了用场。
基本用法
// 使用 new CustomEvent 创建一个自定义事件 const myEvent = new CustomEvent('myCustomEvent', { message: 'hello' }); // 这里,'myCustomEvent' 是你的自定义事件名称, // 而 'detail' 属性则包含你想传递给事件监听器的额外数据。 // 使用 dispatchEvent 方法触发自定义事件 document.dispatchEvent(myEvent); document.addEventListener('myCustomEvent', function(e) { console.log(e.message); // 输出: "hello" });
浏览器兼容
CustomEvent 的兼容性 虽然 CustomEvent 在大多数现代浏览器中都得到了很好的支持,但在某些旧版本的浏览器中,例如 Internet Explorer,可能需要一些额外的处理来支持这个功能。CustomEvent 构造函数在主流现代浏览器中是兼容的: Chrome: 自 Chrome 15 版本开始支持。 Firefox: 自 Firefox 6 版本开始支持。 Safari: 自 Safari 6 版本开始支持。 Edge: 自 Edge 12 版本开始支持。 Internet Explorer: 不支持 CustomEvent 构造函数。但可以通过使用其他方法模拟自定义事件,或者使用一些 polyfill 库来提供支持。
处理兼容 CustomEvent polyfill
// 为那些不支持 CustomEvent 构造函数的浏览器添加一个简单的 polyfill (function () { if (typeof window.CustomEvent === "function") return false; function CustomEvent(event, params) { params = params || { bubbles: false, cancelable: false, detail: null }; var evt = document.createEvent('CustomEvent'); evt.initCustomEvent(event, params.bubbles, params.cancelable, params.detail); return evt; } CustomEvent.prototype = window.Event.prototype; window.CustomEvent = CustomEvent; })();
如果你想要更全面的解决方案,可以考虑使用像 polyfill.io 这样的服务。