Layui 表格默认点击行会切换复选框状态,禁用方法为设置 event: false;若需保留工具栏事件,则用事件委托拦截非 checkbox/非工具按钮的点击,并为禁用行添加 disabled 属性和 pointer-events: none 样式。
为什么点击行会自动选中复选框?
layui 的 table.render() 默认开启「点击行触发复选框切换」行为,这是内置交互逻辑,不是 bug。只要列配置里有 {type: 'checkbox'},且没显式禁用该行为,点击任意非操作列的行区域都会 toggle 当前行的 checkbox 状态。
禁用点击行选中:用 event 配置关掉它
最干净、官方支持的方式是在表格初始化时,通过 event 参数关闭该事件绑定:
table.render({
elem: '#demo',
data: [...],
cols: [[{type: 'checkbox'}, ...]],
// ? 关键:禁用 click-row 触发选中
event: false
});
-
event: false会彻底移除整行的 click 选中监听,但保留 checkbox 本身的点击响应(即仍可点小方框来选/不选) - 如果只希望禁用「非 checkbox 区域」的点击响应,而保留 checkbox 小方块可点,这个方案完全够用
- 注意:
event: false同时也会禁用tool行工具栏事件(如编辑、删除按钮),若你还需要 tool 事件,就不能设为false
需要保留 tool 按钮但禁掉行点击?用事件委托拦截
当必须保留 tool 事件(比如行内有「编辑」按钮),又不想让空白区域点击触发选中时,得手动拦截事件:
// 在 table.done 或外部 DOM 加载后执行
$(document).on('click', '.layui-table-body tbody tr', function(e) {
// 只拦截点击在 td 内容区(非 checkbox、非 tool 按钮)的情况
const $target = $(e.target);
if (
!$target.is('input[type="checkbox"]') &&
!$target.closest('.layui-table-tool').length &&
!$target.closest('[lay-event]').length
) {
e.preventDefault();
e.stopPropagation();
}
});
- 别直接给
tr绑onclick="return false"—— 会破坏 Layui 内部事件委托机制,导致tool失效 - 务必用
$(document).on()动态代理,因为 Layui 分页或重载后tr是重新渲染的 - 检查
$target.closest('[lay-event]')是为了放过带lay-event的按钮(如lay-event="edit")
容易被忽略的坑:禁用后还要同步 UI 状态
单纯阻止点击还不够。如果某行 checkbox 已被程序设为 disabled(比如根据数据字段 status === 'done'),但用户仍能通过点击行把它“点回去”,那 UI 和实际状态就错位了。
- 务必在
done回调里,对禁用行的 checkbox 显式加disabled属性和视觉样式:$('.layui-form-checkbox').addClass('layui-btn-disabled') - 同时加 CSS 阻止 pointer:
.layui-btn-disabled { pointer-events: none; },否则禁用样式可能被绕过 - 别依赖
LAY_DISABLED字段——那是修改源码的野路子,Layui 官方未支持,升级后立即失效
真正稳定的做法就两条:关 event,或精准拦截;再配合 disabled 属性 + 样式锁死。其它花哨方案,上线后大概率翻车。


















