Layui如何解决表格刷新reload后自定义绑定的jQuery事件丢失问题

阿涛吖_9545

阿涛吖_9545

2026-05-13

220人浏览

原创

jquery事件丢失是因为table.reload()重建dom导致原绑定失效,必须用事件委托绑定到稳定父容器如#usertable,并指定目标选择器button.edit-btn,避免在done回调重复绑定。

reload后jquery事件丢失是因为dom被重建

table.reload() 会清空整个 <tbody> 并重新生成所有 <code><tr><code><td>,原来用 <code>$('button').on('click', ...) 绑定的事件监听器全部失效——不是“没触发”,是那个 button 元素早被删了,新的是全新节点。

必须用事件委托(delegate)代替直接绑定

把事件监听挂到不会被 reload 删除的父容器上,比如表格容器 #userTable 或 .layui-table-box,再指定目标选择器。否则每次 reload 后都得手动重绑,极易遗漏或错位。

  • 错误写法(reload 后失效):$("button.edit-btn").on("click", handler)
  • 正确写法(持久生效):$("#userTable").on("click", "button.edit-btn", handler)
  • 如果表格在 iframe 里,委托目标要选 iframe 内的稳定父级,不能选 document(可能跨域或时机不对)
  • 避免用 $(document).on(...),它虽能捕获,但事件冒泡路径长、性能略差,且容易和其它模块冲突

done 回调里不能直接绑事件,要检查是否已存在

有人习惯在 done 回调里重新执行 $("button").on(...),这看似能补救,但有隐患:多次 reload 就会重复绑定,一次点击触发多次 handler;而且如果用户快速点击搜索按钮触发并发 reload,done 可能交错执行,导致事件叠加。

  • 要么坚持用委托(推荐)
  • 要么在 done 中先解绑再绑:$("#userTable").off("click", "button.edit-btn").on("click", "button.edit-btn", handler)
  • 或者加个标记,只在首次渲染时绑定:if (!$("#userTable").data("events-bound")) { /* 绑定 + data("events-bound", true) */ }

自定义操作列模板里要确保元素有稳定 class 或 data 属性

如果你用 templet 渲染按钮,比如 <button class="layui-btn layui-btn-xs del-btn" data-id="{{d.id}}">删除</button>,那委托才能精准命中。别用动态拼接的 class 名,也别依赖 index 或行内 style 做判断——这些 reload 后不可靠。

jQuery 1.12.4
jQuery 1.12.4

jQuery 1.12.4是jQuery 1.x系列的最后一个正式稳定版本,由jQuery团队于2016年发布。该版本主要面向需要兼容旧版浏览器环境的网站和Web应用,尤其适用于仍需支持Internet Explorer 6、Internet Explorer 7、Internet Explorer 8等老旧浏览器的项目。

下载
  • 必须给可交互元素设固定、语义清晰的 class,如 edit-btn、del-btn
  • 需要传参时优先用 data-* 属性(如 data-id="{{d.id}}"),而不是从 DOM 树向上找 tr 再取 LAY_INDEX
  • 如果用了 lay-event,注意它本质也是靠委托实现的,但仅限于 table.on('tool(...)'),不适用于你自己的非工具栏按钮

关键点在于:Layui 的 reload 是 DOM 级别的销毁重建,不是数据层更新。任何依赖原始节点的绑定都会断,唯一稳住的方式,是把监听器挂在“活”着的祖先节点上,并用稳定的选择器定位目标。别指望 done 里补绑能一劳永逸——它只是权宜,委托才是正解。

相关文章

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

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

下载

相关标签:

jquery layui

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

相关专题

更多
python是前端还是后端
python是前端还是后端

Python属于前端也属于后端,其灵活性和丰富的生态系统使得开发人员能够在不同的领域中灵活运用。本专题为大家提供python相关的文章、下载、课程内容,供大家免费下载体验。

2023.08.11

2463

5

前端如何实现即时通讯
前端如何实现即时通讯

实现即时通讯的方法有WebSocket、Long Polling、Server-Sent Events、WebRTC等等。详细介绍:1、WebSocket,它可以在客户端和服务器之间建立持久连接,实现实时的双向通信,前端可以使用 WebSocket API来创建WebSocket连接,并通过发送和接收消息来实现即时通讯;2、Long Polling,是一种模拟实时通信的技术等等。

2023.10.09

5323

6

前端和后端的区别
前端和后端的区别

前端关注的是用户界面的设计和交互,而后端则注重数据处理和逻辑控制。想了解更多前端后端的相关内容,可以阅读本专题下面的文章。

2024.03.19

6370

13

php和前端的关联介绍
php和前端的关联介绍

php既可以作为前端语言,也可以作为后端语言。想了解更多php和前端的相关内容,可以阅读本专题下面的文章。

2024.03.22

5958

10

前端外包工作内容有哪些
前端外包工作内容有哪些

前端外包工作内容包括:1. 网站和应用程序开发;2. 用户界面和交互设计;3. 用户体验优化;4. 设计和视觉开发;5. 跨浏览器兼容性;6. 性能优化;7. 维护和更新;8. 项目管理和沟通。想了解更多前端的相关内容,可以阅读本专题下面的文章。

2024.05.22

843

5

jquery插件有哪些
jquery插件有哪些

jquery插件有jQuery UI、jQuery Validate、jQuery DataTables、jQuery Slick、jQuery LazyLoad、jQuery Countdown、jQuery Lightbox、jQuery FullCalendar、jQuery Chosen和jQuery EasyUI等。本专题为大家提供jquery插件相关的文章、下载、课程内容,供大家免费下载体验。

2023.09.12

601

5

jquery怎么操作json
jquery怎么操作json

操作的方法有:1、“$.parseJSON(jsonString)”2、“$.getJSON(url, data, success)”;3、“$.each(obj, callback)”;4、“$.ajax()”。更多jquery怎么操作json的详细内容,可以访问本专题下面的文章。

2023.10.13

1056

3

jquery删除元素的方法
jquery删除元素的方法

jquery可以通过.remove() 方法、 .detach() 方法、.empty() 方法、.unwrap() 方法、.replaceWith() 方法、.html('') 方法和.hide() 方法来删除元素。更多关于jquery相关的问题,详情请看本专题下面的文章。php中文网欢迎大家前来学习。

2023.11.10

2182

8

jQuery hover()方法的使用
jQuery hover()方法的使用

hover()是jQuery中一个常用的方法,它用于绑定两个事件处理函数,这两个函数将在鼠标指针进入和离开匹配的元素时执行。想了解更多hover()的相关内容,可以阅读本专题下面的文章。

2023.12.04

2128

12

热门下载

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

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
jQuery官方API文档
jQuery官方API文档

共0课时 | 0人学习

jQuery 教程
jQuery 教程

共42课时 | 16.4万人学习

HTML+CSS基础与实战
HTML+CSS基础与实战

共132课时 | 19万人学习