2011-12-29 20 views
6

JSFiddle:http://jsfiddle.net/KH8Gf/27/Delay każdej iteracji pętli przez pewien czas

Kod:

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

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

Jak mogę opóźnić każdej iteracji pętli przez pewien czas?

Próbowałem następujących bez powodzenia:

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

i

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

Odpowiedz

9

Przypadki te wszystkie wydają się działać najlepiej poprzez umieszczenie operację w miejscowym funkcji, a następnie wywołanie że lokalna funkcja z setTimeout() do wdrożenia twoje opóźnienie. Ze względu na cuda zamknięć w JavaScript, funkcja lokalny uzyskuje dostęp do wszystkich zmiennych na poziomie powyżej niej, dzięki czemu można śledzić pętli liczyć tam tak:

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

Należy przesunąć 'setTimeout (obok, 500); 'do bloku if. –

+2

@JosephSilber - poprawione - thx. Próba wpisania zbyt szybko (wyścig do wysłania na SO powoduje to dla mnie). – jfriend00

+0

@ jfriend00 +1 i zadziałało. Nawet nie skończyłem pisać w połowie :( – gideon

Powiązane problemy