layui table 的 clearCache 不会清空勾选状态;需通过 table.checkStatus 获取选中行再手动清除 DOM 选中态,或用 reload 重载表格自动重置,前提是数据含匹配的 id 或 lay-id 字段。

layui table 的 clearCache 不会清空勾选状态
直接调用 table.clearCache('yourTableId') 只会清空本地缓存数据,但不会影响已渲染表格中 checkbox 的 DOM 选中态——这是最常见的误解。勾选状态是独立维护在 table.cache 和 DOM 上的,必须主动干预。
正确做法:用 table.checkStatus + table.render 或手动操作 DOM
有两种稳定可行的方式,取决于你是否要重载数据:
- 如果只是清空勾选、不刷新数据:调用
table.checkStatus('yourTableId')获取当前所有选中行的dataIndex,再遍历对应tr元素,移除layui-table-clickclass 并取消input[type="checkbox"]的checked属性 - 如果顺带重载表格(比如搜索后重置):先调用
table.reload('yourTableId', { where: { ... }, page: { curr: 1 } }),它会自动重置勾选状态(前提是没开启id持久化或没设checkCol: { type: 'checkbox', fixed: 'left' }的额外逻辑)
最容易被忽略的坑:id 字段缺失导致勾选无法清除
layui 表格依赖每行数据的 id(或你在 cols 中指定的 lay-id 字段)来映射勾选状态。如果你的数据里没有 id 字段,或者用了 lay-id="xxx" 但后端返回字段名不匹配,table.checkStatus 返回的 data 为空,手动清除时就会漏掉行。
验证方法:console.log(table.checkStatus('yourTableId')),看 data 数组是否为空或字段值是否为 undefined。补救方式是在 render 时加 id: 'yourTableId',并在 cols 中显式声明:{type: 'checkbox', lay-id: 'id'}(确保和实际数据字段一致)。
一行代码快速清除(仅限简单场景)
如果确认表格结构干净、没自定义 checkbox 渲染,且只有一张表实例,可临时用:
$('.layui-table-box .layui-table tbody input[type="checkbox"]').prop('checked', false).closest('tr').removeClass('layui-table-click');
注意:这绕过了 layui 内部状态管理,后续调用 table.checkStatus 仍会返回旧结果,所以仅适合 UI 层“看起来清了”的临时操作,生产环境请优先走 reload 或补全 id 后用官方 API。











