2010-05-29 132 views
5

我正在使用JavaScript for循环,通过特定的数组循环,并提醒它的价值。我希望在每次提醒后停止30秒,然后继续......直到循环结束。 我的代码都在这里..如何在特定的时间间隔内停止javascript循环?

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

我已经使用的setTimeout()函数,但它不工作......作为循环结束迭代,但不暂停30秒间隔... 还有没有其他的办法比如PHP中的sleep函数?

回答

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

编辑修复闭环问题。

+0

嘿感谢桑德兰Azabani ......这是一个非常有用的答案.. – 2010-05-29 11:15:55

+0

没问题。乐于帮助。 – 2010-05-29 11:16:25

+0

尽管超时是将控件返回给浏览器一段时间的方式,但由于[闭环问题],这不会执行您的想法(http://stackoverflow.com/questions/2568966/how-do-i -pass-的值而不是最基准的-A-JS-可变 - 一个函数)。 '我'将在*每个*超时回调中成为'valArray.length'。 – bobince 2010-05-29 11:20:13

6

JavaScript中没有睡眠功能。 您可以重构上面的代码:

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

尽管这样做有效,但使用'for'循环并创建'i * 30000'的定时器可能看起来比您的答案的半递归更好。 – 2010-05-29 11:09:59

+0

嗯,这不是最佳的,但恕我直言,它更接近问题的原始代码。 – vartec 2010-05-31 07:38:10