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