diff --git a/packages/svelte/src/compiler/phases/2-analyze/visitors/Attribute.js b/packages/svelte/src/compiler/phases/2-analyze/visitors/Attribute.js index 2b7d636606..2dd34bc2db 100644 --- a/packages/svelte/src/compiler/phases/2-analyze/visitors/Attribute.js +++ b/packages/svelte/src/compiler/phases/2-analyze/visitors/Attribute.js @@ -60,7 +60,9 @@ export function Attribute(node, context) { } node.metadata.delegated = - parent?.type === 'RegularElement' && can_delegate_event(node.name.slice(2)); + parent?.type === 'RegularElement' && + can_delegate_event(node.name.slice(2)) && + !context.state.analysis.custom_element; } } } diff --git a/packages/svelte/src/internal/client/dom/elements/events.js b/packages/svelte/src/internal/client/dom/elements/events.js index 4c64c8364a..32a1809583 100644 --- a/packages/svelte/src/internal/client/dom/elements/events.js +++ b/packages/svelte/src/internal/client/dom/elements/events.js @@ -258,7 +258,13 @@ export function handle_event_propagation(event) { // -> the target could not have been disabled because it emits the event in the first place event.target === current_target) ) { - delegated.call(current_target, event); + if (Array.isArray(delegated)) { + for (const handler of delegated) { + handler.call(current_target, event); + } + } else if (typeof delegated === "function") { + delegated.call(current_target, event); + } } } catch (error) { if (throw_error) {