Skip to content

Commit 7e6de9e

Browse files
committed
fix: [#1182] The handleEvent method should be called with the listener scope
1 parent e6914c6 commit 7e6de9e

File tree

2 files changed

+14
-1
lines changed

2 files changed

+14
-1
lines changed

packages/happy-dom/src/event/EventTarget.ts

+1-1
Original file line numberDiff line numberDiff line change
@@ -208,7 +208,7 @@ export default abstract class EventTarget implements IEventTarget {
208208
if ((<IEventListener>listener).handleEvent) {
209209
WindowErrorUtility.captureError(
210210
window,
211-
(<IEventListener>listener).handleEvent.bind(this, event)
211+
(<IEventListener>listener).handleEvent.bind(listener, event)
212212
);
213213
} else {
214214
WindowErrorUtility.captureError(

packages/happy-dom/test/event/EventTarget.test.ts

+13
Original file line numberDiff line numberDiff line change
@@ -103,6 +103,19 @@ describe('EventTarget', () => {
103103
eventTarget.dispatchEvent(dispatchedEvent);
104104
expect(scope).toBe(eventTarget);
105105
});
106+
107+
it('Event listener with handleEvent is called in the scope of the listener when calling dispatchEvent().', () => {
108+
let scope = null;
109+
const listener = {
110+
handleEvent(): void {
111+
scope = this;
112+
}
113+
};
114+
const dispatchedEvent = new Event(EVENT_TYPE);
115+
eventTarget.addEventListener(EVENT_TYPE, listener);
116+
eventTarget.dispatchEvent(dispatchedEvent);
117+
expect(scope).toBe(listener);
118+
});
106119
});
107120

108121
describe('removeEventListener()', () => {

0 commit comments

Comments
 (0)