mirror of https://github.com/sveltejs/svelte
Merge fb119fe59d into 435da13fdd
commit
1bf1e4c207
@ -0,0 +1,5 @@
|
||||
---
|
||||
"svelte": patch
|
||||
---
|
||||
|
||||
fix: handle dynamic multiple attribute on select
|
||||
@ -0,0 +1,12 @@
|
||||
<script>
|
||||
let multiple = $state(false);
|
||||
let value = $state(['b']);
|
||||
</script>
|
||||
|
||||
<select {multiple} bind:value>
|
||||
<option value="a">a</option>
|
||||
<option value="b">b</option>
|
||||
<option value="c">c</option>
|
||||
</select>
|
||||
|
||||
<button onclick={() => multiple = !multiple}>toggle</button>
|
||||
@ -0,0 +1,26 @@
|
||||
export async function test({ assert, target, logs }: { assert: any; target: any; logs: any }) {
|
||||
const select = target.querySelector('select');
|
||||
const options = target.querySelectorAll('option');
|
||||
const [btn] = target.querySelectorAll('button');
|
||||
|
||||
assert.equal(select.multiple, false);
|
||||
assert.equal(options[0].selected, false);
|
||||
assert.equal(options[1].selected, true);
|
||||
assert.equal(options[2].selected, false);
|
||||
|
||||
btn.click();
|
||||
await Promise.resolve();
|
||||
|
||||
assert.equal(select.multiple, true);
|
||||
assert.equal(options[0].selected, false);
|
||||
assert.equal(options[1].selected, true);
|
||||
assert.equal(options[2].selected, false);
|
||||
|
||||
btn.click();
|
||||
await Promise.resolve();
|
||||
|
||||
assert.equal(select.multiple, false);
|
||||
assert.equal(options[0].selected, false);
|
||||
assert.equal(options[1].selected, true);
|
||||
assert.equal(options[2].selected, false);
|
||||
}
|
||||
@ -1,14 +0,0 @@
|
||||
[
|
||||
{
|
||||
"code": "attribute_invalid_multiple",
|
||||
"message": "'multiple' attribute must be static if select uses two-way binding",
|
||||
"start": {
|
||||
"line": 14,
|
||||
"column": 19
|
||||
},
|
||||
"end": {
|
||||
"line": 14,
|
||||
"column": 29
|
||||
}
|
||||
}
|
||||
]
|
||||
@ -1,18 +0,0 @@
|
||||
<script>
|
||||
let value;
|
||||
let multiple;
|
||||
</script>
|
||||
|
||||
<!-- ok -->
|
||||
<select bind:this={value} {multiple}>
|
||||
<option>1</option>
|
||||
<option>2</option>
|
||||
<option>3</option>
|
||||
</select>
|
||||
|
||||
<!-- error -->
|
||||
<select bind:value {multiple}>
|
||||
<option>1</option>
|
||||
<option>2</option>
|
||||
<option>3</option>
|
||||
</select>
|
||||
Loading…
Reference in new issue