【问题标题】:JavaScript setTimeout function inside of for loop only happens oncefor循环内的JavaScript setTimeout函数只发生一次
【发布时间】:2013-03-10 07:38:04
【问题描述】:

我有一个 for 循环,其中有一个 setTimeout 函数,旨在延迟循环的每次迭代。虽然循环中的其余代码正在正确迭代,但 setTimeout 函数只工作一次,就好像 for 循环在其中一样,而不是相反。这是我的代码:

    for (x = 0; x <= roll; x ++) {
        setTimeout(function() {
            space = $(".player." + turn).parents("td").attr("id");
            space = parseInt(space);
            player = $(".player." + turn);
            $(".player." + turn).remove();
            nextSpace = space + 1;
            $("#" + nextSpace).append(player);
        }, 500);
    }

有什么想法吗?

【问题讨论】:

  • 那些 setTimeouts 将被快速连续调用,不会有任何延迟。您需要在 setTimeout 中使用回调来实现延迟。

标签: javascript jquery for-loop settimeout delay


【解决方案1】:

试试这个:

setTimeout(function() {
    // your code
}, 500 * x);

【讨论】:

    【解决方案2】:

    这不是 setTimeout 的工作方式。这不是同步延迟。如果您想延迟循环的每次迭代,则需要通过递归调用内部函数来实现。

    function inner_function(x, max_x) {
        space = $(".player." + turn).parents("td").attr("id");
        space = parseInt(space);
        player = $(".player." + turn);
        $(".player." + turn).remove();
        nextSpace = space + 1;
        $("#" + nextSpace).append(player);
    
        setTimeout(inner_function, 500, x+1, max_x);
    }
    
    inner_function(0, 500);
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2022-10-14
      • 2016-01-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多