diff --git a/src/compiler/compile/render_dom/wrappers/Element/index.ts b/src/compiler/compile/render_dom/wrappers/Element/index.ts index 20dfed891d..25635ae88c 100644 --- a/src/compiler/compile/render_dom/wrappers/Element/index.ts +++ b/src/compiler/compile/render_dom/wrappers/Element/index.ts @@ -669,10 +669,10 @@ export default class ElementWrapper extends Wrapper { } block.chunks.mount.push(b` - if (${data}.multiple) @select_options(${this.var}, ${data}.value); + (${data}.multiple ? @select_options : @select_option)(${this.var}, ${data}.value); `); block.chunks.update.push(b` - if (${block.renderer.dirty(Array.from(dependencies))} && ${data}.multiple) @select_options(${this.var}, ${data}.value); + if (${block.renderer.dirty(Array.from(dependencies))}) (${data}.multiple ? @select_options : @select_option)(${this.var}, ${data}.value);; `); } else if (this.node.name === 'input' && this.attributes.find(attr => attr.node.name === 'value')) { const type = this.node.get_static_attribute_value('type'); diff --git a/test/runtime/samples/spread-element-input-select/_config.js b/test/runtime/samples/spread-element-input-select/_config.js new file mode 100644 index 0000000000..7361e6bb31 --- /dev/null +++ b/test/runtime/samples/spread-element-input-select/_config.js @@ -0,0 +1,25 @@ +export default { + async test({ assert, component, target, window }) { + const select = target.querySelector('select'); + const [option1, option2] = select.childNodes; + + let selections = Array.from(select.selectedOptions); + assert.equal(selections.length, 1); + assert.ok(!selections.includes(option1)); + assert.ok(selections.includes(option2)); + + component.value = 'Hello'; + + selections = Array.from(select.selectedOptions); + assert.equal(selections.length, 1); + assert.ok(selections.includes(option1)); + assert.ok(!selections.includes(option2)); + + component.spread = { value: 'World' }; + + selections = Array.from(select.selectedOptions); + assert.equal(selections.length, 1); + assert.ok(!selections.includes(option1)); + assert.ok(selections.includes(option2)); + } +}; diff --git a/test/runtime/samples/spread-element-input-select/main.svelte b/test/runtime/samples/spread-element-input-select/main.svelte new file mode 100644 index 0000000000..41554d794f --- /dev/null +++ b/test/runtime/samples/spread-element-input-select/main.svelte @@ -0,0 +1,9 @@ + + +