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