静态data初始化时直接加checked: true最省事,适用于前端本地定义的数据;异步加载则需在done回调中通过table.cache设置第一行checked并调用table.checkstatus更新状态。

初始化时自动勾选第一行:静态 data 直接加 checked: true
如果你的表格数据是前端本地定义的(比如 data: [{...}, {...}]),最稳、最轻量的方式就是在原始数组第一项里直接写 checked: true。Layui 渲染时会自动识别并打钩,无需任何回调或延时。
- 必须写在数据对象内部,不是列配置里,也不是 table.render() 的顶层参数
- 仅对
type: 'checkbox'或type: 'radio'列生效 - 不要写成
layChecked: true(那是老版本或误传写法,当前稳定版认checked) - 示例:
data: [ { id: 1, name: '张三', checked: true }, { id: 2, name: '李四' } ]
异步加载时 done 回调里改 table.cache 并刷新状态
如果走的是 url 异步加载,done 回调是唯一可靠的时机——但不能直接点 DOM 或设 input.checked,得动缓存再触发重绘。
- 必须用
setTimeout(() => {}, 0)包一层,确保table.cache已写入新数据 - 取
table.cache['yourFilterId'][0],设.checked = true,不是操作res.data[0] - 必须紧接着调
table.checkStatus('yourFilterId'),否则视觉不更新、后续checkStatus()拿不到结果 - 示例:
done: function(res, curr, count) { setTimeout(() => { const cache = table.cache['userTable']; if (cache && cache.length > 0) { cache[0].checked = true; table.checkStatus('userTable'); } }, 0); }
为什么不能在 done 里用 layui.$(...).click() 模拟点击
看似简单,但极易失效:Layui 的 row 事件委托依赖 DOM 完全挂载和内部事件系统就绪,而 done 触发时这两者常未完成。
-
document.querySelector(...).click()是原生 click,Layui 不监听它 -
layui.$(...).click()虽能触发 jQuery 事件,但若 table.on('row') 尚未注册或 lay-id 不匹配,照样没响应 - 更糟的是:即使点了,checkbox 状态不会同步到
table.cache,table.checkStatus()仍为空 - 别碰 DOM checkbox 元素——手动设
checked属性会被 Layui 下一帧覆盖
容易被忽略的关键点:lay-filter 唯一性与 type 配置
所有自动勾选逻辑都依赖两个底层前提,漏一个就全盘失效。
-
table.render()必须指定唯一lay-filter="xxx",且后续所有table.checkStatus('xxx')、table.cache['xxx']都要用这个值 - 列配置中必须有
{ type: 'checkbox' }或{ type: 'radio' },否则checked字段压根不解析 - 不要混用
type: 'checkbox'和单选逻辑——table.checkRow()是 radio 专用,对 checkbox 无效 - 分页场景下,
checked: true只影响当前页数据;如需跨页保持,得自己维护选中 ID 列表并在 reload 时重新注入











