2013-03-10 84 views
0

我有一個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

回答

4

試試這個:

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

太棒了,那就是訣竅。謝謝! – americanknight 2013-03-10 07:46:55

+0

很高興幫助:) – dfsq 2013-03-10 07:47:52

1

這不是如何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