在 Svelte 中单击该复选框所在的行时切换复选框

Toggle a checkbox when the row it is in is clicked in Svelte

提问人:askwer 提问时间:11/16/2023 最后编辑:Elvis Adomnicaaskwer 更新时间:11/16/2023 访问量:32

问:

我在表格行中有这个复选框,并且该行有一个单击事件,我尝试做的是在单击整行时切换复选框,当我在切换函数中使用 console.log 时触发事件并且字段正在更新。但显示的值没有改变,并且复选框没有被切换:

let items = [ 
{  "id": 1,
   "name": "Item1",
   "selected": false
},
{  "id": 2,
   "name": "Item2",
   "selected": false
}]

const toggle = (item) => {
    item.selected = !item.selected
}

...
{#each items as item, index(item['id'])}
    <tr on:click={()=>toggle(item)}>
        <td>
            <input type=checkbox bind:checked={item['selected']}/>
        </td>
    </tr>
{/each}
JavaScript sveltekit

评论


答:

1赞 Elvis Adomnica 11/16/2023 #1

更新不起作用的原因是您正在更改绑定对象的属性,而不是对象引用本身。为了使其触发更新,您需要在切换函数中重新分配项目,如下所示:

<script>
let items = [ 
  { "id":1,
    "name":"Item1",
    "selected":false
  },
  { "id":2,
    "name":"Item2",
    "selected":false
  }
]

const toggle = (item, index) => {
    item.selected = !item.selected
    items[index] = item;
}
</script>

<table>
{#each items as item, index}
    <tr on:click={()=>toggle(item, index)}>
        <td style="background: red; width: 50px;">
            <input type=checkbox bind:checked={item['selected']}/>
        </td>
    </tr>
{/each}
</table>

请注意,我添加了一些背景颜色和宽度以使其更明显。