如何将自定义事件分派给所有侦听元素

how can I dispatch customized events to all listening elements

本文关键字:元素 分派 自定义 事件      更新时间:2023-09-26

示例代码:

var evt = document.createEvent('Event');
evt.initEvent('myevent',true,true);
ele.dispatchEvent(evt)  //ele is an HTML element

,但它只是调度事件,只有一个元素,是否有一个优雅的方式来广播事件,所有的元素使用addEventListener('myevent',…)注册回调函数?

d = {}; // keep track of the listeners for each event.
// Register the event listeners
function registerListener(elem, evt, d) {
   if (d.hasOwnProperty(evt)) {
      d[evt].push(elem);
   }
   else {
      d[evt] = [];
   }
}
// Get the listeners and dispatch the event to all them
function dispatchAll(evt, d) {
   var listeners = d[evt],
       elem;
   for (var i = 0; i < listeners.length; i++) {
      elem = listeners[i];
      elem.dispatchEvent(evt);
   }
}