2010-05-29 29 views
5

estoy usando javascript for loop, para recorrer una matriz en particular y alertar sobre su valor. Quiero que después de cada alerta se detenga durante 30 segundos y luego continúe ... hasta el final del ciclo. mi código va aquí ..cómo detener un bucle de javascript durante un intervalo de tiempo determinado?

for(var i=0; i<valArray.lenght; i++) 
    { 
     alert("The value ="+valArray[i]); 
     //stop for 30seconds..  
    } 

he utilizado la función setTimeout(), pero no está funcionando ... como final del bucle de iteración, pero no una pausa de 30 segundos de intervalo ... ¿hay alguna otra manera como la función de dormir en PHP?

Respuesta

8
for (var i = 0; i < valArray.length; i++) 
    (function(i) { 
    setTimeout(function() { 
     alert(valArray[i]); 
    }, i * 30000); 
    })(i); 

Editado para solucionar el problema del lazo de cierre.

+0

bueno gracias Delan Azabani ... fue una respuesta muy útil .. –

+0

No hay problema. Feliz de ayudar. –

+0

Si bien los tiempos de espera son la forma de devolver el control al navegador por un tiempo, esto no hará lo que usted cree debido al [Problema de Closure Closure] (http://stackoverflow.com/questions/2568966/how-do-i -pass-the-value-not-the-reference-of-a-js-variable-to-a-function). 'i' será' valArray.length' en * cada * devolución de llamada. – bobince

6

No hay función de reposo en JavaScript. Puede refactoriza por encima de código para:

function alert_and_sleep(i) { 
    alert("The value ="+valArray[i]); 
    if(i<valArray.length) { 
    setTimeout('alert_and_sleep('+(i+1)+')',30000); 
    } 
} 
alert_and_sleep(0); 
+0

Aunque esto funciona, el uso de un bucle 'for' y la creación de temporizadores de' i * 30000' probablemente se ve mejor que la semi-recursión de su respuesta. –

+0

Bueno, no es óptimo, pero en mi humilde opinión está más cerca del código original de la pregunta. – vartec

Cuestiones relacionadas