layer 3.0.2 初始关闭问题

提问 已结 7 2509
缺水的海豚
悬赏:5飞吻
在测试 Layer 3.0.2 的时候,发现一个问题,我想关闭 Loading 层,同样的位置,同样的代码:

closeAll('loading')
在 3.0.1 中可以正常工作,如下图:



但是在 3.0.2 中,缺不能关闭 loading 层,根本无法进入 $.each 循环,如下所示:

回帖
  • 贤心
    贤心 (管理员)
    2017-2-26
    @麦康科技 你是不是在页面一打开就执行了 layer.load(); 然后在某个Ajax执行成功后,试图执行layer.closeAll('loading'); 但有时ajax会比layer.ready先执行,导致找不到loading层,而无法关闭呢?

    针对这种情况,建议你把layer.load()和Ajax代码区域都放入 layer.ready 中
    0 回复
  • 贤心
    贤心 (管理员)
    2017-2-26
    经官网测试: http://layer.layui.com/
    执行 layer.closeAll('loading'); 可以关闭loading层
    0 回复
  • 我的 jQuery 是 2.2.4,我的调用代码如下:

    $.ajaxSetup({
    error: function (xhr, status, e) {
    layer.msg('访问出错');
    },
    beforeSend: function (xhr) {
    $.showLoading();
    },
    complete: function (xhr, ts) {
    $.hideLoading();
    }
    });
    经过 9 次 F5(刷新)发现,有 3 次成功,6 次失败。
    0 回复
  • $.showLoading() 和 $.hideLoading() 的方法如下:

    + function ($) {
    "use strict";

    $.showLoading = function () {
    layer.load(0, { shade: 0.3 });
    };

    $.hideLoading = function () {
    layer.closeAll('loading');
    };
    }($);
    0 回复
  • 我再次跟踪了几次,发现下面这段代码(v3.0.2 源代码中的第 170 行)
    layer.ready(function(){
    document.body ? that.creat() : setTimeout(function(){
    that.creat();
    }, 50);
    });
    如果打上断点,在调用 layer.load 方法的时候,就有可能会执行 layer.ready 内的代码(我上面说的成功那几次,都是打了断点,并且执行了 layer.ready 内的代码的)。

    但是如果没有打断点,在调用 layer.load 方法的时候,不会执行 layer.ready 内的代码。

    如果 layer.load 时没有执行 layer.ready 内的代码,就不能正常关闭(意思就是 layer.closeAll('loading') 不起作用),loading 的界面就会一直显示在界面上。
    0 回复
  • @贤心 我使用的是 jquery.datatables.js 这个插件,在加载页面的时候,使用该插件默认的 ajax 组件进行数据获取,想设置全局的 ajax 参数,来进行 Loading 的提示,我看 3.0.2 的更新日志里说可以不用再在 layer.ready 里面执行弹出层了,就试了试,发现貌似还是不行。
    0 回复
  • @贤心 我测试了,如果把所有的代码都放在 layer.ready 中去,就没有这个问题了,包括 3.0.2 中,也建议放在 layer.ready 中。但是,我的代码就和原来的代码没太大区别,所有的代码外面都包了 2 层,如下所示:
    $(function() {
    layer.ready(function() {
    ……
    // 所有业务代码都在这里
    ……
    });
    });
    0 回复
本帖已设置禁止回复