for循环中的JavaScript setTimeout函数只发生一次

for循环中的JavaScript setTimeout函数只发生一次

问题描述:

我有一个forTime循环,里面有一个setTimeout函数用于延迟循环的每次迭代。虽然循环内的其余代码正确迭代,但setTimeout函数只能工作一次,就好像for循环在里面一样,而不是相反。这里是我的代码:for循环中的JavaScript setTimeout函数只发生一次

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); 
    } 

任何想法?

+1

这些setTimeouts将被迅速连续调用,没有任何延迟。您需要在setTimeout中使用回调来实现延迟。 – danronmoon 2013-03-10 07:40:02

试试这个:

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

太棒了,那就是诀窍。谢谢! – americanknight 2013-03-10 07:46:55

+0

很高兴帮助:) – dfsq 2013-03-10 07:47:52

这不是如何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); 
+0

感谢您的提示。 – americanknight 2013-03-10 07:59:21