Skip to content

Commit 38a7c5c

Browse files
committed
events: reset the event target to null
Allow an event to be dispatched multiple times by resetting the event target to `null` when dispatch is complete.
1 parent 4b0776a commit 38a7c5c

2 files changed

Lines changed: 22 additions & 1 deletion

File tree

lib/internal/event_target.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -464,7 +464,7 @@ class EventTarget {
464464
}
465465

466466
if (event !== undefined)
467-
event[kTarget] = undefined;
467+
event[kTarget] = null;
468468
}
469469

470470
[kCreateEvent](nodeValue, type) {

test/parallel/test-eventtarget.js

Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -162,6 +162,27 @@ let asyncTest = Promise.resolve();
162162
eventTarget.dispatchEvent(ev);
163163
}
164164

165+
{
166+
// Same event dispatched multiple times.
167+
const event = new Event('foo');
168+
const eventTarget1 = new EventTarget();
169+
const eventTarget2 = new EventTarget();
170+
171+
eventTarget1.addEventListener('foo', common.mustCall((event) => {
172+
strictEqual(event.target, eventTarget1);
173+
}));
174+
175+
eventTarget2.addEventListener('foo', common.mustCall((event) => {
176+
strictEqual(event.target, eventTarget2);
177+
}));
178+
179+
eventTarget1.dispatchEvent(event);
180+
strictEqual(event.target, null);
181+
182+
eventTarget2.dispatchEvent(event);
183+
strictEqual(event.target, null);
184+
}
185+
165186
{
166187
const eventTarget = new EventTarget();
167188
const event = new Event('foo', { cancelable: true });

0 commit comments

Comments
 (0)