layer快速点击会触发多次回调

在这里插入图片描述

场景还原

测试同学反馈点击了一次操作,为什么会有两条操作记录?

我:????

排查思路

查看日志,看一下是不是发了两次请求,果不其然啊:

日志截图

并发了,同一时间发送了两次请求,出现了脏写。

原因

系统的confirm是线程阻塞的,而layer.confirm是非阻塞的,这一点在官方的API文档中有提到。

解决方案

var lock = false;
layer.confirm('is not?',{btn:['确定','取消']},function(index){
    if(!lock) {
        //加锁防止多次回调
        lock =true;
        $.ajax({
            // .....
        })
    }
})

原文地址:https://www.cnblogs.com/haorenergou/p/11665037.html