2010-05-29 146 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

相關問題