2011-12-29 13 views
6

jsFiddle:http://jsfiddle.net/KH8Gf/27/Retardo cada iteración del bucle por un tiempo determinado

Código:

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

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

¿Cómo se puede retrasar Yo cada iteración del bucle por un tiempo determinado?

He intentado lo siguiente sin éxito:

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

y

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

Respuesta

9

todos estos casos parecen funcionar mejor al poner la operación en una función local y luego llamar a esa función local desde setTimeout() para poner en práctica tu retraso Debido a las maravillas de los cierres en Javascript, la función local tiene acceso a todas las variables en los niveles por encima de ella para que pueda mantener un registro de su bucle contador no como esto:

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

Debe moverse 'setTimeout (al lado, 500); 'en el bloque if. –

+2

@JosephSilber - corregido - thx. Tratando de escribir demasiado rápido (la carrera para publicar en SO me lo hace a mí). – jfriend00

+0

@ jfriend00 +1 y funcionó. Ni siquiera había terminado de escribir a la mitad :( – gideon

Cuestiones relacionadas