DOM Events

Event, CustomEvent, and EventTarget in a non-DOM runtime.

Elide exposes Event, CustomEvent, and EventTarget. There is no DOM tree, so dispatch has one target and no capture or bubble traversal.

Event and CustomEvent

const event = new CustomEvent("tick", {
  detail: 42,
  cancelable: true,
});

Events expose the standard type, target, current target, phase, cancellation, trust, timestamp, and propagation members. CustomEvent adds detail.

During dispatch, eventPhase is Event.AT_TARGET and composedPath() contains the current target. After dispatch, currentTarget is null and composedPath() is empty; target remains the dispatch target.

EventTarget

const target = new EventTarget();

target.addEventListener("submit", (event) => {
  event.preventDefault();
}, { once: true });

target.dispatchEvent(new Event("submit", { cancelable: true })); // false
target.dispatchEvent(new Event("submit", { cancelable: true })); // true
  • Callbacks may be functions or objects with handleEvent().
  • Duplicate (type, callback, capture) registrations are ignored.
  • once, passive, capture, and signal options are accepted.
  • Removing a listener during dispatch prevents that listener from running later in the same dispatch.
  • Adding a listener during dispatch affects a later dispatch.
  • Listener exceptions are reported without stopping remaining listeners.
  • dispatchEvent() returns false when a cancelable event was prevented.

See DOM Abort for signal-controlled listeners.