必须用 table.on('rowdouble(tableid)'),tableid需与render时id参数完全一致且大小写敏感,监听须在render后执行;双击回调中obj.data为空,须通过obj.tr.attr('data-index')查table.cache获取数据。

必须用 table.on('rowDouble(tableId)'),不能用原生 dblclick
layui 表格的行双击事件只有 rowDouble 这一个原生支持的监听方式,其他任何模拟(比如给 tr 绑 dblclick)在重绘、分页、展开行等场景下都会失效。常见错误是写成 on('rowdouble')(漏掉大写 D)或 on('rowDouble(*)')(通配符不推荐,易误触)。
-
tableId必须和table.render()中配置的id参数完全一致(大小写敏感) - 监听代码必须写在
table.render()调用之后,否则绑定无效 - 如果渲染时只用了
elem: '#id'但没设id,得用rowDouble(*),但更稳妥的是补上id: 'myTable' - 表格若动态插入(如弹窗内),要确保监听时机在
table.init完成后,可加setTimeout或监听table.setDone回调
回调里拿不到现成数据?得靠 obj.tr 和 table.cache
双击事件回调的 obj 对象里没有直接的数据字段,obj.data 是空的——这是最容易踩的坑。正确路径是:从 obj.tr 取 data-index,再查 table.cache['yourTableId']。
-
var index = obj.tr.attr('data-index')→ 获取当前行索引(字符串) -
var rowData = table.cache['myTable'][index]→ 拿到该行原始数据对象 - 服务端分页时,
table.cache只存当前页数据;前端分页才是全量 - 别用
$(obj.tr).find('td:eq(1)').text()提取字段——列顺序一变、隐藏列一加,就取错
移动端双击根本不会触发,得换交互方案
layui 的 rowDouble 在 iOS/Android 上默认不响应,因为浏览器把双击识别为缩放操作。这不是 bug,是平台限制。
- 真要支持移动设备,必须放弃双击,改用长按(
contextmenu+preventDefault)、操作列按钮(tool(filter))、或自定义悬浮菜单 - 如果仍想保留双击逻辑,需加 UA 判断,PC 端走
rowDouble,移动端改监听tool或cell事件 - 注意:
lay-unrow属性可局部禁用某列/某单元格的行事件,适合把操作列排除在外
双击后弹窗展示 JSON,别直接 JSON.stringify 塞进 content
用 layer.open({ content: JSON.stringify(rowData, null, 2) }) 看起来能用,但实际体验差:无语法高亮、无滚动、中文乱码、嵌套对象展开困难。
- 推荐用
<pre class="brush:php;toolbar:false;"><code></code> 包裹:<code>content: '<pre class="brush:php;toolbar:false;"><code>' + JSON.stringify(rowData, null, 2) + '</code></pre>' - 加
area: ['600px', '400px']和maxmin: true,方便查看长字段 - 敏感字段(如密码、token)要提前过滤,别一股脑全打出来
- 如果数据量极大(>500 行数组),
JSON.stringify可能卡顿,建议节流或只展示前几层
table.cache 查值这两步,缺一不可**。写在 render 前、或以为 obj.data 有值,是调试半天没反应的两大主因。











