2011-12-29 48 views
6

JSFiddle:http://jsfiddle.net/KH8Gf/27/trễ mỗi lần lặp của vòng lặp trong một thời gian nhất định

Code:

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

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

Làm thế nào tôi có thể trì hoãn mỗi lần lặp của vòng lặp trong một thời gian nhất định?

Tôi đã thử các sau thất bại:

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

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

Trả lời

9

Những trường hợp này tất cả dường như làm việc tốt nhất bằng cách đặt các hoạt động vào một chức năng địa phương và sau đó gọi rằng chức năng địa phương từ setTimeout() để thực hiện sự chậm trễ của bạn. Do những điều kỳ diệu của việc đóng cửa trong javascript, chức năng cục bộ được truy cập vào tất cả các biến ở các cấp phía trên để bạn có thể theo dõi số vòng lặp của bạn như sau:

$(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

Bạn nên di chuyển 'setTimeout (tiếp theo, 500); 'vào khối if. –

+2

@JosephSilber - đã sửa - thx. Đang cố gắng nhập quá nhanh (cuộc đua đăng trên SO thực hiện điều đó với tôi). – jfriend00

+0

@ jfriend00 +1 và nó hoạt động. Tôi thậm chí còn không gõ nửa chừng: ( – gideon

Các vấn đề liên quan