Skip to content

Commit 7da86ef

Browse files
fix: don't throw for undefined non delegated event handlers (#15087)
* fix: don't throw for `undefined` non delegated event handlers * chore: update typings
1 parent ee024ff commit 7da86ef

File tree

4 files changed

+21
-6
lines changed

4 files changed

+21
-6
lines changed

.changeset/clever-cherries-hear.md

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
---
2+
'svelte': patch
3+
---
4+
5+
fix: don't throw for `undefined` non delegated event handlers

packages/svelte/src/internal/client/dom/elements/events.js

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -49,10 +49,10 @@ export function replay_events(dom) {
4949
/**
5050
* @param {string} event_name
5151
* @param {EventTarget} dom
52-
* @param {EventListener} handler
53-
* @param {AddEventListenerOptions} options
52+
* @param {EventListener} [handler]
53+
* @param {AddEventListenerOptions} [options]
5454
*/
55-
export function create_event(event_name, dom, handler, options) {
55+
export function create_event(event_name, dom, handler, options = {}) {
5656
/**
5757
* @this {EventTarget}
5858
*/
@@ -63,7 +63,7 @@ export function create_event(event_name, dom, handler, options) {
6363
}
6464
if (!event.cancelBubble) {
6565
return without_reactive_context(() => {
66-
return handler.call(this, event);
66+
return handler?.call(this, event);
6767
});
6868
}
6969
}
@@ -108,8 +108,8 @@ export function on(element, type, handler, options = {}) {
108108
/**
109109
* @param {string} event_name
110110
* @param {Element} dom
111-
* @param {EventListener} handler
112-
* @param {boolean} capture
111+
* @param {EventListener} [handler]
112+
* @param {boolean} [capture]
113113
* @param {boolean} [passive]
114114
* @returns {void}
115115
*/
Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,9 @@
1+
import { ok, test } from '../../test';
2+
3+
export default test({
4+
async test({ target }) {
5+
const button = target.querySelector('button');
6+
ok(button);
7+
button.dispatchEvent(new window.MouseEvent('mouseenter'));
8+
}
9+
});
Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
<button onmouseenter={undefined}></button>

0 commit comments

Comments
 (0)