默认不启用点击行选中就不会触发,但若已添加自定义逻辑(如done中tbody事件委托),须彻底移除或禁用,否则持续干扰;优先检查rowclicktocheck参数是否启用,再清理done回调、row事件监听及checkbox反向触发逻辑。

默认不启用点击行选中,就根本不会触发——但如果你已经加了自定义逻辑(比如在 done 里绑了 tbody 的事件委托),那必须从根源上移除或禁用它,否则点击行为会持续干扰用户操作。
检查是否启用了 rowClickToCheck 参数
Layui 2.8+ 版本新增了原生支持:rowClickToCheck: true。如果渲染表格时写了这个配置,哪怕没写任何 JS,点击行也会自动选中复选框。
- 直接删掉该参数,或显式设为
false - 若不确定是否启用,查
table.render()调用中是否有这行;有则它是第一优先级的触发源 - 注意:该参数对
type: "radio"列也生效,不只是 checkbox
清除 done 回调里的事件委托绑定
大多数手动实现都藏在 done 回调里,用 $('body').on('click', '.layui-table-body tbody tr', ...) 或类似方式监听。这类代码不会随表格重绘自动销毁,容易残留。
- 找到初始化表格时的
done: function(res, curr, count) { ... }块 - 删掉里面所有
$().on('click', ...)或layui.$().on('click', ...)绑定行点击的逻辑 - 特别注意:有些项目会把事件绑定写在
done外部、用变量缓存选择器,也要一并清理
确认没有监听 row 事件并调用 checkRow / setRowChecked
table.on('row(filter)', ...) 是另一个常见入口。只要回调里调了 obj.setRowChecked() 或 table.checkRow(),点击任意行就会强制选中。
- 全局搜索
table.on('row(和setRowChecked、checkRow( - 如果存在且不是你当前需要的功能,注释或删除整段监听逻辑
- 注意:
row事件是捕获整个tr区域的,包括空白、文字、图标,比 DOM 点击更隐蔽
验证是否还有隐藏的 checkbox 监听器在转发事件
极少数方案会监听 checkbox 事件后,再反向触发行点击效果(比如点 checkbox 后主动 $(tr).click()),形成循环。这种写法会导致“取消点击行”后仍被二次触发。
- 搜
table.on('checkbox(回调里是否含.click()、.trigger('click')等调用 - 检查是否在
form.on('checkbox(中做了类似操作(虽然少见,但混合 form 表单时可能出错) - 用浏览器开发者工具的 Event Listeners 面板,选中某行
tr,看有没有未预期的 click handler
最易忽略的是:多个模块共用同一张表,A 模块启用了 rowClickToCheck,B 模块又在 done 里加了事件委托,C 模块还监听了 row ——三者叠加,关掉一个根本没用。得逐个排查,而不是只改一处。











