Layui如何实现点击表格某一行自动展开其下方的子表

秋萱吖_2835

秋萱吖_2835

2026-05-28

689人浏览

原创

layui table 行点击事件须用 table.on('row(tabledemo)', fn) 绑定,其中 tabledemo 为初始化时配置的 id;子表应插在目标 tr 后紧邻位置,class="layui-table-expand-row",td 设 colspan;展开状态需手动缓存并同步。

layui table 的 rowclick 事件怎么绑定才有效

默认情况下 layui.table 不会触发行点击的原生事件,必须在渲染后通过 on('row') 或 on('rowDouble') 手动监听。直接给 tr 绑 click 会失效——因为表格是动态渲染的,且存在分页、重载等场景,DOM 可能被反复销毁重建。

  • 必须用 table.on('row(tableDemo)', function(obj){...}),其中 tableDemo 是你初始化时传的 id 值(不是元素 ID,是 elem 对应的配置项 id)
  • 如果没设 id,就无法监听行事件;别漏写这个配置
  • 不要在 done 回调里用 $('tr').on('click', ...),这种绑定只对当前页生效,翻页后失效

展开子表该插在哪?tr 后面还是 tbody 里

子表不能插在 tr 内部(比如 <td colspan="*">...</td>),否则会破坏表格结构,导致 layui 自动计算列宽错乱、固定列错位、甚至报错 "Cannot read property 'children' of undefined"。

  • 正确做法:在目标 tr 后面紧接插入一个新 tr,class="layui-table-expand-row"(自定义类名即可),里面套一个 td,colspan 设为原表格列数
  • 用 obj.tr.after(...) 插入,而不是 append 或 before —— obj.tr 是当前点击行的 jQuery 对象,保证位置准确
  • 注意:如果用了 fixed: true(固定列),子表必须同时在左、中、右三个 tbody 中分别插入对应结构,否则视觉错位

子表用 table.render 还是手写 HTML

子表如果只是静态展示或简单数据,手写 <table><tr><td>...</td></tr></table> 更轻量、可控;但如果要排序、分页、工具栏或和父表联动,就必须用 table.render,但要注意生命周期。

深蓝色网站后台管理系统layui框架模板-AdminPro
深蓝色网站后台管理系统layui框架模板-AdminPro

一款深蓝色网站后台管理系统layui框架模板

下载
  • 每次展开前先检查是否已渲染过,避免重复初始化:if (layui.table.get('subTableId')) { layui.table.reload('subTableId', {...}) }
  • 子表的 elem 必须是唯一 ID,且不能是父表容器内部的静态 DOM(比如 #subTable1),而应是动态生成的临时容器,例如 <div id="subTable_<code>obj.data.id">
  • 子表高度建议用 height: 200 固定,否则 table.render 可能因父容器未显式设高而撑不开
  • 折叠/展开状态如何保持和同步

    layui 表格本身不维护展开状态,全靠你自己记录。常见错误是只存了 ID,没存“是否已展开”,导致点两次才收起,或刷新后状态丢失。

    • 用一个对象缓存状态:const expandMap = {},键为 obj.data.id(或其它唯一标识),值为 true/false
    • 点击时先查 expandMap[id]:为 true 就收起(remove() 子表容器 + expandMap[id] = false),否则展开
    • 如果启用了分页,记得在 page 或 sort 回调里清空 expandMap,否则跨页后状态错乱
    子表 DOM 插入位置、状态缓存粒度、以及 fixed 列下的多 tbody 处理,这三点最容易被跳过,一漏就卡半天。

    相关文章

    PHP速学视频免费教程(入门到精通)
    PHP速学视频免费教程(入门到精通)

    PHP怎么学习?PHP怎么入门?PHP在哪学?PHP怎么学才快?不用担心,这里为大家提供了PHP速学教程(入门到精通),有需要的小伙伴保存下载就能学习啦!

    下载

    相关标签:

    layui

    本站声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn

    相关专题

    更多
    ajax教程
    ajax教程

    php中文网为大家带来ajax教程合集,Ajax是一种用于创建快速动态网页的技术。通过在后台与服务器进行少量数据交换,Ajax可以使网页实现异步更新。这意味着可以在不重新加载整个网页的情况下,对网页的某部分进行更新。php中文网还为大家带来ajax的相关下载资源、相关课程以及相关文章等内容,供大家免费下载使用。

    2023.06.14

    2640

    4

    ajax中文乱码解决方法
    ajax中文乱码解决方法

    ajax中文乱码解决方法有设置请求头部的字符编码、在服务器端设置响应头部的字符编码和使用encodeURIComponent对中文进行编码。本专题为大家提供ajax中文乱码相关的文章、下载、课程内容,供大家免费下载体验。

    2023.08.31

    340

    5

    ajax传递中文乱码怎么办
    ajax传递中文乱码怎么办

    ajax传递中文乱码的解决办法:1、设置统一的编码方式;2、服务器端编码;3、客户端解码;4、设置HTTP响应头;5、使用JSON格式。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

    2023.11.15

    2473

    5

    ajax网站有哪些
    ajax网站有哪些

    使用ajax的网站有谷歌、维基百科、脸书、纽约时报、亚马逊、stackoverflow、twitter、hacker news、shopify和basecamp等。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

    2024.09.24

    1141

    6

    FrankenPHP集成Laravel详细教程
    FrankenPHP集成Laravel详细教程

    本专题提供FrankenPHP集成Laravel的详细配置指南,全面解析运行原理、开发环境搭建、Caddyfile配置、Octane工作模式、数据库连接、队列任务、定时任务和生产环境优化,解决部署过程中常见的报错与兼容性问题。

    2026.10.08

    0

    20

    LLVM自定义Pass怎么写
    LLVM自定义Pass怎么写

    本专题聚焦LLVM自定义Pass开发,整理Pass类结构、run()方法、PreservedAnalyses、CMake构建、插件注册、-load-pass-plugin加载和测试用例编写流程。

    2026.09.30

    120

    10

    LLVM RISC-V参数配置教程
    LLVM RISC-V参数配置教程

    本专题介绍LLVM对RISC-V基础ISA和扩展的支持方式,涵盖RV32、RV64、标准扩展、实验性扩展、厂商扩展、-menable-experimental-extensions和版本差异。

    2026.09.30

    100

    14

    LLVM IR中间表示入门指南
    LLVM IR中间表示入门指南

    本专题整理LLVM IR的核心概念,包括中间表示作用、模块结构、函数、基本块、SSA形式、类型系统和常见语法,帮助新手理解LLVM编译流程中的关键层。

    2026.09.30

    80

    12

    PDF转图片方法
    PDF转图片方法

    需要把 PDF 页面用于上传、预览、分享或图片归档时,PDF 转图片方法专题整理 JPG/PNG 格式选择、逐页导出、清晰度设置、批量下载和结果检查等流程,帮助用户稳定完成 PDF 图片化处理。

    2026.09.30

    80

    26

    热门下载

    更多
    网站特效
    /
    网站源码
    /
    网站素材
    /
    前端模板

    精品课程

    更多
    相关推荐
    /
    热门推荐
    /
    最新课程
    ThinkPHP配置开发与CMS后台实战
    ThinkPHP配置开发与CMS后台实战

    共87课时 | 12.8万人学习

    第二十三期_综合实战
    第二十三期_综合实战

    共89课时 | 11万人学习

    Layui 快速入门精讲
    Layui 快速入门精讲

    共5课时 | 1.6万人学习