layui 弹窗关闭问题

发布于 2022-09-12 13:25:33 字数 814 浏览 15 评论 0

一个弹出层,有个“确定”按钮,点击确认的时候,有个请求,这时候不希望立即关闭窗口,而是根据接口返回的结果来判断是否要关闭窗口

根据官方文档提示,只要在回调函数里面return false 就不会关闭窗口,

layer.open({
       btn: ['取消', '确认'],
   
       btn2: function(index, layero){
     
        var result = false;

        $.ajax({
            url: "xxxx",
            type: "POST",
            contentType: 'application/json',
            dataType: "json",
            data: JSON.stringify({email: email, code:code, password:password}),
            success: function(res){
                if (res.code == 401) {
                    result= false;
                }else if(res.code == 200){
                     result= true;
                };
            },
        });
        return result;

但是我发现 return result 在 ajax 请求还没返回结果时,result result 先执行了,所以一直返回false导致无法关闭

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

柳若烟 2022-09-19 13:25:33

因为 ajax 是异步请求,这里并不会阻塞等待他执行完成,可以使用 layer.close来处理。

layer.open 会返回一个资源ID,在 ajax 的结果中使用 layer.close(资源ID) 来关闭弹窗。

- layer.open({
+ window.dialog1 = layer.open({
    btn: ['取消', '确认'],

    btn2: function(index, layero){

    var result = false;

    $.ajax({
        url: "xxxx",
        type: "POST",
        contentType: 'application/json',
        dataType: "json",
        data: JSON.stringify({email: email, code:code, password:password}),
        success: function(res){
            if (res.code == 401) {
                result= false;
            }else if(res.code == 200){
                 result= true;
            };
+            if(result && window.dialog1){
+                layer.close(dialog1);
+            }
        },
    });
    return result;
+ }});
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文