mirror of https://github.com/sveltejs/svelte
Merge e85fbacab3 into b4d1583ae2
commit
6acd11e08c
@ -0,0 +1,5 @@
|
||||
---
|
||||
'svelte': patch
|
||||
---
|
||||
|
||||
fix: prevent `selectedcontent` mutation from changing the selected option
|
||||
@ -0,0 +1,22 @@
|
||||
import { flushSync } from 'svelte';
|
||||
import { ok, test } from '../../assert';
|
||||
|
||||
export default test({
|
||||
async test({ target, assert }) {
|
||||
const select = target.querySelector('select');
|
||||
ok(select);
|
||||
|
||||
select.value = 'B';
|
||||
select.dispatchEvent(new Event('input', { bubbles: true }));
|
||||
|
||||
// because another element has a delegated `oninput` handler, a global `input`
|
||||
// listener runs and, once it returns, a microtask checkpoint delivers the
|
||||
// mutation records *before* the `change` event — we emulate that checkpoint here
|
||||
await Promise.resolve();
|
||||
|
||||
select.dispatchEvent(new Event('change', { bubbles: true }));
|
||||
flushSync();
|
||||
|
||||
assert.equal(select.value, 'B');
|
||||
}
|
||||
});
|
||||
@ -0,0 +1,17 @@
|
||||
<script lang="ts">
|
||||
let value = $state('A');
|
||||
</script>
|
||||
|
||||
<input oninput={() => {}} />
|
||||
<select bind:value>
|
||||
<button><selectedcontent></selectedcontent></button>
|
||||
<option>A</option>
|
||||
<option>B</option>
|
||||
<option>C</option>
|
||||
</select>
|
||||
|
||||
<style>
|
||||
select,::picker(select){
|
||||
appearance: base-select;
|
||||
}
|
||||
</style>
|
||||
Loading…
Reference in new issue