diff --git a/src/compiler/compile/nodes/shared/Expression.ts b/src/compiler/compile/nodes/shared/Expression.ts index 938cd8433f..d054416717 100644 --- a/src/compiler/compile/nodes/shared/Expression.ts +++ b/src/compiler/compile/nodes/shared/Expression.ts @@ -147,7 +147,10 @@ export default class Expression { contextual_dependencies.add(name); - if (!lazy) { + const owner = template_scope.get_owner(name); + const is_index = owner.type === 'EachBlock' && owner.key && name === owner.index; + + if (!lazy || is_index) { template_scope.dependencies_for_name.get(name).forEach(name => dependencies.add(name)); } } else { diff --git a/test/runtime/samples/each-block-keyed-index-in-event-handler/_config.js b/test/runtime/samples/each-block-keyed-index-in-event-handler/_config.js new file mode 100644 index 0000000000..6c9d754e57 --- /dev/null +++ b/test/runtime/samples/each-block-keyed-index-in-event-handler/_config.js @@ -0,0 +1,18 @@ +export default { + html: ` + + + + `, + + async test({ assert, target, window }) { + const click = new window.MouseEvent('click'); + + await target.querySelectorAll('button')[1].dispatchEvent(click); + await target.querySelectorAll('button')[1].dispatchEvent(click); + + assert.htmlEqual(target.innerHTML, ` + + `); + } +}; diff --git a/test/runtime/samples/each-block-keyed-index-in-event-handler/main.svelte b/test/runtime/samples/each-block-keyed-index-in-event-handler/main.svelte new file mode 100644 index 0000000000..7bb14e88f0 --- /dev/null +++ b/test/runtime/samples/each-block-keyed-index-in-event-handler/main.svelte @@ -0,0 +1,16 @@ + + +{#each list as value, index (value)} + {#if value} + + {/if} +{/each} \ No newline at end of file