必须用 table.on('rowDouble(id)'),其中 id 是 table.render() 中配置的实例 id 值(如 id: 'userTable'),大小写敏感且需完全一致;事件须在 render 后立即绑定,不可提前或放 done 回调;obj.data 直接获取整行数据,禁用 DOM 遍历取值;移动端双击不可靠,应降级为单击按钮或长按。

必须用 table.on('rowDouble(id)'),不是 on('row') 或 DOM 监听
Layui 表格原生只认 rowDouble(id) 这种写法,括号里填的是 table.render() 时配置的 id 值(如 id: 'userTable'),不是 CSS 选择器,也不是任意字符串。写成 on('row')、on('dblclick') 或用 layui.$(elem).on('dblclick', 'tr') 都不会触发——这些是常见失败根源。
该事件必须在 table.render() 调用之后立即绑定,不能提前,也不能塞进 done 回调里重复注册(否则可能多次触发)。如果表格容器是动态插入(比如弹窗内),得确保监听发生在 table.init 完成后。
id 参数漏设或不一致,事件就静默失效
table.render() 必须显式传入 id: 'xxx',且这个值要和 table.on('rowDouble(xxx)') 中的 xxx 完全一致(大小写敏感)。如果只写了 elem: '#demo' 却没设 id,事件名就得改成 rowDouble(*) 才能兜底匹配,但不推荐——通配符容易误绑其他表格。
常见错误:
- 渲染时写
id: 'user-table',监听时写rowDouble('usertable') - 表格容器是
<div id="tableWrap"></div>,却误把id设成'tableWrap'——id是表格实例标识,和 DOM ID 可不同 - 用了服务端分页,但
id值在多个表格间重复,导致缓存混乱
拿到数据直接用 obj.data,别手动遍历 td
回调函数的 obj 参数里,obj.data 就是当前行原始 JSON 数据(即你传给 data 或后端返回的那条记录),字段名、嵌套结构、空值都保持原样。不需要用 $(obj.tr).find('td').eq(1).text() 这类方式取值——列顺序一变、开了隐藏列、用了 templet,结果立刻错位或为空。
注意两点:
- 如果表单用
form.val('filter', obj.data)填充,要求表单name和obj.data的 key 完全一致;不一致就得先映射,比如{ username: obj.data.user_name } -
disabled或readonly的表单元素不会被form.val()覆盖,得单独用$('#field').val(value)
移动端双击基本不可用,必须降级处理
iOS 和 Android 浏览器默认禁用或大幅延迟 dblclick,Layui 的 rowDouble 在手机上大概率不触发。强行用 touchstart + 时间差模拟,会和展开行、复选框、工具栏按钮等交互冲突,调试成本高且不稳定。
更实际的做法:
- 改用单击 + 操作列按钮(如「编辑」文字或图标)
- 长按(
longpress)事件替代双击,需额外引入手势库或自己实现防抖 - PC 端保留双击,移动端通过
layui.device().mobile判断后自动切换交互逻辑
别在移动端死磕双击——它不是缺失功能,而是平台限制下的无效设计。


















