2011-12-29 165 views
6

的jsfiddle每次循環:http://jsfiddle.net/KH8Gf/27/延遲經一定時間

代碼:

$(document).ready(function() 
{ 
$('#expand').click(function() 
    { 
     var qty= $('#qty').val(); 

     for (var counter = 0; counter < qty; counter++) 
     { 
      $('#child').html($('#child').html() + '<br/>new text');    
     } 
    }); 
}); 

我如何通過一定的時間延遲每次循環?

我嘗試以下失敗:

setTimeout(function(){ 
$('#child').html($('#child').html() + '<br/>new text'); 
},500); 

$('#child').delay(500).html($('#child').html() + '<br/>new text'); 

回答

9

這些案件似乎都通過將操作到本地功能,然後調用從setTimeout()本地函數來實現最好的工作你的延遲。由於關閉的JavaScript中的奇觀,當地的功能得到在它上面的級別的訪問所有的變量,所以你可以跟蹤你的循環計數有這樣的:

$(document).ready(function() { 
    $('#expand').click(function() { 
      var qty = $('#qty').val(); 
      var counter = 0; 
      var child = $('#child'); 

      function next() { 
       if (counter++ < qty) { 
        child.append('<br/>new text');    
        setTimeout(next, 500); 
       } 
      } 
      next(); 
     }); 
}); 
+2

你應該將'的setTimeout(接下來, 500);進入if塊。 – 2011-12-29 07:21:28

+2

@JosephSilber - 更正 - thx。嘗試輸入速度太快(競賽張貼在SO這對我來說)。 – jfriend00 2011-12-29 07:25:05

+0

@ jfriend00 +1和它的工作。我甚至沒有完成中途輸入:( – gideon 2011-12-29 07:27:07