mirror of https://github.com/sveltejs/svelte
fix checkbox bind:group when index depends on another context (#5835)
parent
2d697a38c5
commit
662d9b44e6
@ -0,0 +1,53 @@
|
||||
export default {
|
||||
html: `
|
||||
<input type="checkbox" value="a" data-index="x-1">
|
||||
<input type="checkbox" value="b" data-index="x-1">
|
||||
<input type="checkbox" value="c" data-index="x-1">
|
||||
<input type="checkbox" value="a" data-index="x-2">
|
||||
<input type="checkbox" value="b" data-index="x-2">
|
||||
<input type="checkbox" value="c" data-index="x-2">
|
||||
<input type="checkbox" value="a" data-index="y-1">
|
||||
<input type="checkbox" value="b" data-index="y-1">
|
||||
<input type="checkbox" value="c" data-index="y-1">
|
||||
<input type="checkbox" value="a" data-index="y-2">
|
||||
<input type="checkbox" value="b" data-index="y-2">
|
||||
<input type="checkbox" value="c" data-index="y-2">
|
||||
<input type="checkbox" value="a" data-index="z-1">
|
||||
<input type="checkbox" value="b" data-index="z-1">
|
||||
<input type="checkbox" value="c" data-index="z-1">
|
||||
<input type="checkbox" value="a" data-index="z-2">
|
||||
<input type="checkbox" value="b" data-index="z-2">
|
||||
<input type="checkbox" value="c" data-index="z-2">
|
||||
`,
|
||||
|
||||
async test({ assert, component, target, window }) {
|
||||
const inputs = target.querySelectorAll('input');
|
||||
const checked = new Set();
|
||||
const checkInbox = async (i) => {
|
||||
checked.add(i);
|
||||
inputs[i].checked = true;
|
||||
await inputs[i].dispatchEvent(event);
|
||||
};
|
||||
|
||||
for (let i = 0; i < 18; i++) {
|
||||
assert.equal(inputs[i].checked, checked.has(i));
|
||||
}
|
||||
|
||||
const event = new window.Event('change');
|
||||
|
||||
await checkInbox(2);
|
||||
for (let i = 0; i < 18; i++) {
|
||||
assert.equal(inputs[i].checked, checked.has(i));
|
||||
}
|
||||
|
||||
await checkInbox(12);
|
||||
for (let i = 0; i < 18; i++) {
|
||||
assert.equal(inputs[i].checked, checked.has(i));
|
||||
}
|
||||
|
||||
await checkInbox(8);
|
||||
for (let i = 0; i < 18; i++) {
|
||||
assert.equal(inputs[i].checked, checked.has(i));
|
||||
}
|
||||
}
|
||||
};
|
@ -0,0 +1,15 @@
|
||||
<script>
|
||||
const list = [
|
||||
{ id: 'x', data: [{ id: 1, data: [] }, { id: 2, data: [] }] },
|
||||
{ id: 'y', data: [{ id: 1, data: [] }, { id: 2, data: [] }] },
|
||||
{ id: 'z', data: [{ id: 1, data: [] }, { id: 2, data: [] }] }
|
||||
];
|
||||
</script>
|
||||
|
||||
{#each list as { id, data }}
|
||||
{#each data as item}
|
||||
<input type="checkbox" bind:group={item.data} value="a" data-index="{id}-{item.id}" />
|
||||
<input type="checkbox" bind:group={item.data} value="b" data-index="{id}-{item.id}" />
|
||||
<input type="checkbox" bind:group={item.data} value="c" data-index="{id}-{item.id}" />
|
||||
{/each}
|
||||
{/each}
|
Loading…
Reference in new issue