渲染后自动选中第一行需同时实现视觉高亮与逻辑标记:在done回调中用layui.$触发第一行click事件以激活row监听,并手动设置table.cache中首项checked为true再调用checkstatus;若为本地data,可直接在数据中设checked:true。
渲染完成后自动选中第一行,本质是两件事:视觉高亮 + 逻辑标记(比如触发 row 事件、同步 checkbox 状态)。直接操作 dom 点击或设 checked 属性大概率失效,必须走 layui 的状态同步机制。
done 回调里用 jQuery 模拟点击第一行
这是最轻量、兼容性最好、且能触发 table.on('row(filter)') 的方式。前提是表格已配置 lay-filter,且启用了行点击监听。
- 确保
table.render()中设置了唯一的lay-filter="xxx" - 在
done回调末尾用layui.$(或$,若已引入 jQuery)定位第一行tr并触发click - 注意 selector 要匹配实际渲染结构:
.layui-table-view[lay-id="xxx"] .layui-table-body tr[data-index="0"] - 别漏掉
data-index="0"—— 这是 layui 内部给每行打的索引,不是你数据里的id
done: function(res, curr, count) {
if (res.data.length > 0) {
layui.$('.layui-table-view[lay-id="userTable"] .layui-table-body tr[data-index="0"]').click();
}
}
同时勾选第一行的 checkbox(如果启用了多选)
仅点击行不会自动勾选 checkbox,要真正“选中”,还得手动设置缓存并刷新状态。否则 table.checkStatus() 拿不到它。
- 先确认表格启用了
{type: 'checkbox'}列,且lay-id唯一(如<table id="userTable" lay-id="userTable">) <li>在 <code>done里用setTimeout(() => {}, 0)延迟执行,确保 DOM 渲染完成 - 查
table.cache['userTable']找第一项,设checked: true,再调table.checkStatus('userTable') - 不推荐直接改 DOM 的
input[type=checkbox].checked,会被 layui 覆盖
done: function(res, curr, count) {
setTimeout(() => {
const cache = table.cache['userTable'];
if (cache && cache.length > 0) {
cache[0].checked = true;
table.checkStatus('userTable');
}
}, 0);
}
初始化时就让第一行默认勾选(适合静态 data)
如果你的数据是前端本地定义的(非异步加载),最稳的方式是在原始 data 数组里直接加 checked: true 字段。
- 只对
data模式生效,url异步加载时不适用 - 字段名必须是小写
checked,Checked或isChecked都无效 - layui 会在渲染时自动识别并打钩,且
table.checkStatus()能立刻读到 - 无需额外 JS,无 timing 问题,也不依赖 DOM 结构
table.render({
elem: '#userTable',
data: [
{ id: 1, name: '张三', checked: true }, // ✅ 第一行初始勾选
{ id: 2, name: '李四' }
],
cols: [[{ type: 'checkbox' }, { field: 'name', title: '姓名' }]]
});
最容易被忽略的是:checkbox 全选/单选状态和行点击高亮是两套独立机制,不能互相替代。要同时满足 UI 高亮 + 数据可取 + 事件触发,通常得组合使用 click 行 + 手动设 cache。另外,分页模式下 data-index="0" 永远指当前页第一行,不是全量数据第一行——这点在服务端分页时尤其关键。











