DS
Back to JavaScript

event-delegation.js

javascript/dom/event-delegation.js
JavaScript

Efficient event delegation pattern to handle dynamic child elements.

event-delegation.js
/**
 * @description Efficient event delegation pattern to handle dynamic child elements.
 * @tags dom, events, performance, delegation
 */
export function delegate(parent, selector, eventType, handler) {
  const container = typeof parent === "string" ? document.querySelector(parent) : parent;
  if (!container) return () => {};

  const listener = function (event) {
    const target = event.target.closest(selector);
    if (target && container.contains(target)) {
      handler.call(target, event, target);
    }
  };

  container.addEventListener(eventType, listener);

  return function cleanup() {
    container.removeEventListener(eventType, listener);
  };
}