for循环里执行setTimeout无法实现延迟执行

发布于 2022-09-07 04:02:15 字数 892 浏览 16 评论 0

//循环复制
$(".forExecute").click(function(){
    var tableSign = $("#tableSign").val();
    if(!(tableSign > 0)){
        layer.msg("请选择要复制的数据");
        return;
    }
    var forNum = $("#forNum").val();
    for(var i = 1; i <= forNum; i++){
        var data = {
            "tableSign":tableSign,
            "pageNo":i,
            "pageSize":$(".pageSize").val(),
            "startDate":$(".startDate").val()    
        };
        setTimeout(executeDataCopy(data),5000);
    }
})

function executeDataCopy(data){
    $.ajax({
        type: "get",
        url: "executeCopyData.do",
        data:data, 
        dataType: 'json',
        success: function(data){
            if(data != null && data.success != null){
                layer.alert(data.msg);
            } else {
                layer.alert("系统繁忙,请稍后再试");
            }
        }
    });
}

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

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

发布评论

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

评论(6

漆黑的白昼 2022-09-14 04:02:16
setTimeout(executeDataCopy,5000,data);
萤火眠眠 2022-09-14 04:02:16
setTimeout(function(){
    executeDataCopy(data)
},5000);

遇到 2022-09-14 04:02:16

setTimeout第一个参数是 Function,而你传了一个executeDataCopy(data),这是一个方法的调用(而不是方法本身),实际上你传给setTimeout的是undefined,可以按上面几位大佬的方法改。

仅此而已 2022-09-14 04:02:15

这样就可以了

for(var i =1; i<10; i++){
        (function(a){
            var data = 123456;
            setTimeout(function(){
                console.log(data);
            }, **a*2000**);
        })(i);
}
极致的悲 2022-09-14 04:02:15

setTimeout(executeDataCopy(data),5000);
这句executeDataCopy已经被立刻执行了,可以用下面的方式传参:
setTimeout(executeDataCopy,5000,data);

无声情话 2022-09-14 04:02:15
setTimeout(executeDataCopy(data),5000);
这么写就相当于直接执行executeDataCopy(data);
再套一层:
setTimeout(function(){
    executeDataCopy(data)
},5000);
就行了
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文