diff --git a/lib/internal/event_target.js b/lib/internal/event_target.js index 03b2540878c625..ddab605c8a3c6a 100644 --- a/lib/internal/event_target.js +++ b/lib/internal/event_target.js @@ -521,8 +521,11 @@ class EventTarget { } const root = this[kEvents].get(type); - if (root === undefined || root.next === undefined) + if (root === undefined || root.next === undefined) { + if (event !== undefined) + event[kIsBeingDispatched] = false; return true; + } let handler = root.next; let next; diff --git a/test/parallel/test-eventtarget.js b/test/parallel/test-eventtarget.js index cfad9c60a32c01..d3b1ee7358a104 100644 --- a/test/parallel/test-eventtarget.js +++ b/test/parallel/test-eventtarget.js @@ -186,6 +186,22 @@ let asyncTest = Promise.resolve(); deepStrictEqual(event.composedPath(), []); + eventTarget2.dispatchEvent(event); + strictEqual(event.eventPhase, Event.NONE); + strictEqual(event.target, eventTarget2); + deepStrictEqual(event.composedPath(), []); +} +{ + // Same event dispatched multiple times, without listeners added. + const event = new Event('foo'); + const eventTarget1 = new EventTarget(); + const eventTarget2 = new EventTarget(); + + eventTarget1.dispatchEvent(event); + strictEqual(event.eventPhase, Event.NONE); + strictEqual(event.target, eventTarget1); + deepStrictEqual(event.composedPath(), []); + eventTarget2.dispatchEvent(event); strictEqual(event.eventPhase, Event.NONE); strictEqual(event.target, eventTarget2);