Layui弹窗关闭后自动刷新父表格?3种实现方式对比(附完整代码)

Layui弹窗关闭后自动刷新父表格?3种实现方式对比(附完整代码)

最近在重构一个后台管理系统,又和Layui打上了交道。说实话,虽然现在Vue、React大行其道,但在一些需要快速交付、对前端工程化要求不高的内部系统里,Layui这种“开箱即用”的框架依然有它的生存空间。不过,用久了就会发现,一些看似简单的交互,比如“弹窗表单提交成功后,关闭弹窗并自动刷新外面的数据表格”,要实现得优雅、稳定,还真得花点心思。网上搜到的方案五花八门,有的能用但耦合度高,有的看似巧妙却埋着坑。今天,我就结合自己趟过的坑,把三种主流且经过实战检验的实现方式掰开揉碎了讲清楚,并附上可直接复用的完整代码。

1. 理解核心问题:为什么需要监听与刷新?

在深入代码之前,我们得先搞清楚这个需求背后的逻辑链条。这绝不仅仅是一个“点一下按钮刷新页面”那么简单。

想象一个典型的后台管理场景:你有一个用户列表表格(父级Table),点击“编辑”按钮,会弹出一个Layer弹窗,里面是表单。修改信息并提交后,你希望弹窗自动关闭,并且外面的用户列表能立刻显示出更新后的数据,而不需要用户手动点击浏览器的刷新按钮或表格的刷新图标。

这里面的技术关键点有两个:

  1. 监听弹窗关闭的时机:不能简单地在提交表单成功后直接刷新父表格,因为网络请求是异步的,你需要确保数据确实已经成功提交到服务器并返回了结果。同时,弹窗的关闭动画可能也需要时间。
  2. 跨窗口/跨作用域通信:弹窗(子窗口或iframe)和承载父表格的页面(父窗口)通常是两个独立的执行环境。子窗口如何安全、可靠地通知父窗口“该干活了”?

如果处理不好,就会出现各种奇怪的问题:表格刷新了但数据没变、弹窗还没关掉表格就开始刷新导致页面错乱、或者在复杂的多层弹窗嵌套下脚本报错。

注意:本文讨论的“弹窗”主要指使用Layui的layer.open方法创建的、类型为type: 2(即iframe层)的页面层。这是Layui中最常见也是最灵活的弹窗形式,其通信问题也最具代表性。

2. 方案一:经典回调函数法(最直接)

这是最直观、也是官方示例中常见的一种思路。核心是利用layer.open方法的successend回调,以及在子页面中调用parent对象。

实现原理: 在父页面打开弹窗时,通过success回调向弹窗页面(子页面)注入一个回调函数。当子页面中的表单提交成功,并确认需要关闭弹窗时,它先调用这个来自父页面的回调函数来刷新表格,然后再触发关闭操作。

操作步骤与代码

首先,在父页面(拥有表格的页面)中,编写打开编辑弹窗的函数:

// 父页面 - 例如在 table.on(‘tool(table)‘, function(obj){}) 的编辑事件中
function openEditDialog(dataId) {
    layer.open({
        type: 2,
        title: ‘编辑信息‘,
        area: [‘700px‘, ‘500px‘],
        content: ‘/path/to/edit/form/page?id=‘ + dataId, // 子页面地址
        success: function(layero, index){
            // 关键步骤:向子页面的window对象挂载一个回调函数
            var iframeWin = window[layero.find(‘iframe‘)[0][‘name‘]];
            iframeWin.refreshParentTable = function() {
                // 这里执行刷新父级table的操作
                table.reload(‘yourTableId‘); // ‘yourTableId‘是表格渲染时的id
            };
        }
    });
}

然后,在子页面(弹窗内的表单页面)中,处理表单提交成功的逻辑:

// 子页面 - 表单提交成功的回调函数中
form.on(‘submit(formFilter)‘, function(data){
    $.ajax({
        ur
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值