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