diff --git a/.changeset/wicked-apples-yawn.md b/.changeset/wicked-apples-yawn.md new file mode 100644 index 000000000000..3022c34fd016 --- /dev/null +++ b/.changeset/wicked-apples-yawn.md @@ -0,0 +1,5 @@ +--- +'svelte': patch +--- + +fix: fire delegated events on target even it was disabled in the meantime diff --git a/packages/svelte/src/internal/client/dom/elements/events.js b/packages/svelte/src/internal/client/dom/elements/events.js index 363b8e1ed501..25ece5f569d7 100644 --- a/packages/svelte/src/internal/client/dom/elements/events.js +++ b/packages/svelte/src/internal/client/dom/elements/events.js @@ -237,7 +237,13 @@ export function handle_event_propagation(event) { // @ts-expect-error var delegated = current_target['__' + event_name]; - if (delegated !== undefined && !(/** @type {any} */ (current_target).disabled)) { + if ( + delegated !== undefined && + (!(/** @type {any} */ (current_target).disabled) || + // DOM could've been updated already by the time this is reached, so we check this as well + // -> the target could not have been disabled because it emits the event in the first place + event.target === current_target) + ) { if (is_array(delegated)) { var [fn, ...data] = delegated; fn.apply(current_target, [event, ...data]);