diff --git a/src/compile/render-dom/wrappers/Element/index.ts b/src/compile/render-dom/wrappers/Element/index.ts index 78a50d36ac..3920c72c63 100644 --- a/src/compile/render-dom/wrappers/Element/index.ts +++ b/src/compile/render-dom/wrappers/Element/index.ts @@ -290,13 +290,8 @@ export default class ElementWrapper extends Wrapper { }); } - const eventHandlerOrBindingUsesComponent = ( - this.bindings.length > 0 || - this.node.handlers.some(handler => handler.usesComponent) - ); - const eventHandlerOrBindingUsesContext = ( - this.bindings.some(binding => binding.node.usesContext) || + this.bindings.some(binding => binding.handler.usesContext) || this.node.handlers.some(handler => handler.usesContext) || this.node.actions.some(action => action.usesContext) ); diff --git a/test/runtime/samples/binding-input-checkbox-deep-contextual-b/_config.js b/test/runtime/samples/binding-input-checkbox-deep-contextual-b/_config.js new file mode 100644 index 0000000000..539a07312b --- /dev/null +++ b/test/runtime/samples/binding-input-checkbox-deep-contextual-b/_config.js @@ -0,0 +1,50 @@ +export default { + html: ` +
+

one

+
+
+

two

+
+
+

three

+
+ `, + + ssrHtml: ` +
+

one

+
+
+

two

+
+
+

three

+
+ `, + + async test({ assert, component, target, window }) { + const inputs = [ ...target.querySelectorAll('input') ]; + + const event = new window.Event('change'); + + inputs[1].checked = true; + await inputs[1].dispatchEvent(event); + + await component.clear(); + + assert.htmlEqual(target.innerHTML, ` +

one

+

three

+ `); + + inputs[1].checked = true; + await inputs[1].dispatchEvent(event); + + await component.clear(); + + assert.htmlEqual(target.innerHTML, ` +

one

+ `); + } +}; diff --git a/test/runtime/samples/binding-input-checkbox-deep-contextual-b/main.svelte b/test/runtime/samples/binding-input-checkbox-deep-contextual-b/main.svelte new file mode 100644 index 0000000000..ec90f52b73 --- /dev/null +++ b/test/runtime/samples/binding-input-checkbox-deep-contextual-b/main.svelte @@ -0,0 +1,18 @@ + + +{#each todos as todo, i} +
+ +

{todo.text}

+
+{/each} \ No newline at end of file