table.reload() 后 checkbox 状态丢失是必然的,因会销毁重建 DOM;需调用 table.clearCache('yourTableId') 清除缓存中的选中状态,且 ID 必须与 table.render 中完全一致。
table.reload() 后 checkbox 状态丢失是必然的
因为 table.reload() 会销毁并重建整个表格 dom,所有 ui 层状态(包括 input[type=checkbox] 的 checked 属性)都会被丢弃。layui 不自动保存或恢复选中状态——它只按当前传入的 data 或 url 渲染,不关心你之前勾了哪几行。
清空已选状态必须分两步:清数据层 + 清 UI 层
不能只靠 table.reload({ where: {} }),那只是刷新数据,不会影响已缓存的勾选记录。真正要“清空”,得主动干预:
- 调用
table.clearCache('yourTableId')(Layui 2.8+ 推荐),它会清除table.cache中该实例的全部缓存,包括选中状态快照 - 若版本较老(table.cache['yourTableId'] = [] 手动清空缓存数组
- 再执行
table.reload('yourTableId', { where: {}, page: { curr: 1 } }),确保新请求不带旧参数、页码归零
别漏掉 checkField 和 done 回调里的状态同步
如果你的表格启用了多选且依赖后端返回的选中字段(比如 isCheck: true),仅清缓存还不够:
- 渲染时必须指定
checkField: 'isCheck',否则 Layui 不知道拿哪个字段判断初始勾选 - 在
done回调里,手动遍历res.data,把所有isCheck设为false,再调table.reload()—— 否则新数据里没这个字段,checkbox 全是未勾选态,但用户感知不到“被清空”了 - 如果用了
parseData,确保它不意外覆盖或删除isCheck字段,否则字段丢了,Layui 就认不出该勾谁
用 table.getChecked() 或 checkStatus 前先确认是否真清了
很多人以为 reload 完就干净了,结果 table.checkStatus('xxx').data 还返回旧数据——说明缓存没清干净:
-
table.getChecked('xxx')是 2.8+ 新 API,只返回当前页已勾选项,但它依赖底层缓存;缓存不清,它就“看不见”变化 -
table.checkStatus('xxx')返回对象包含data(当前页)、isAll(是否全选)、count(总勾选数),但这些值都从table.cache读,不是实时 DOM - 验证是否清空:reload 后立刻打日志
console.log(table.checkStatus('xxx')),若count !== 0或data.length > 0,说明clearCache没生效或表 ID 写错了
最易忽略的是:clearCache 的参数必须和 table.render({ id: 'xxx' }) 里的 id 完全一致,错一个字符,就等于对空气操作。


















