diff --git a/src/compiler/compile/render_dom/wrappers/Element/index.ts b/src/compiler/compile/render_dom/wrappers/Element/index.ts
index f11ce63023..695f41d344 100644
--- a/src/compiler/compile/render_dom/wrappers/Element/index.ts
+++ b/src/compiler/compile/render_dom/wrappers/Element/index.ts
@@ -725,6 +725,15 @@ export default class ElementWrapper extends Wrapper {
block.chunks.update.push(b`
if (${block.renderer.dirty(Array.from(dependencies))} && ${data}.multiple) @select_options(${this.var}, ${data}.value);
`);
+ } else if (this.node.name === 'input' && this.attributes.find(attr => attr.node.name === 'value')) {
+ block.chunks.mount.push(b`
+ ${this.var}.value = ${data}.value;
+ `);
+ block.chunks.update.push(b`
+ if ('value' in ${data}) {
+ ${this.var}.value = ${data}.value;
+ }
+ `);
}
}
diff --git a/test/runtime/samples/spread-element-input-value-undefined/_config.js b/test/runtime/samples/spread-element-input-value-undefined/_config.js
new file mode 100644
index 0000000000..1459462e07
--- /dev/null
+++ b/test/runtime/samples/spread-element-input-value-undefined/_config.js
@@ -0,0 +1,12 @@
+export default {
+ async test({ assert, component, target, window }) {
+ const input = target.querySelector("input");
+ component.value = undefined;
+
+ assert.equal(input.value, "undefined");
+
+ component.value = "foobar";
+
+ assert.equal(input.value, "foobar");
+ },
+};
diff --git a/test/runtime/samples/spread-element-input-value-undefined/main.svelte b/test/runtime/samples/spread-element-input-value-undefined/main.svelte
new file mode 100644
index 0000000000..5c9121dc03
--- /dev/null
+++ b/test/runtime/samples/spread-element-input-value-undefined/main.svelte
@@ -0,0 +1,5 @@
+
+
+
\ No newline at end of file