2012-12-05 37 views
2

我有一個ID爲play的按鈕。在for循環中使用setTimeout和整數

我想用此代碼對該按鈕進行倒計時。但由於某種原因,我無法得到這個工作。

var timeoutTime = 500, seconds = 5; 
var countdown = $("#play h4"); 
for(var i = seconds; i>0; i--) 
{ 
    setTimeout(function() { 
    countdown.text("" + i); },timeoutTime); 
    timeoutTime += 1000; 
} 

我嘗試了很多東西,我能得到的最好的是5 4 3 2 1只是1而不是有了這個代碼,我上的按鈕獲得0。

有什麼問題?

回答

4

使用此:

for(var i = seconds; i>0; i--) { 
    (function(i){ 
     setTimeout(function() { 
      countdown.text("" + i); }, timeoutTime); 
    })(i); 
    timeoutTime += 1000; 
} 

你的問題是,我的變化,你總是用我的最後一個值調用,因爲你傳遞給setTimeout的回調循環完成後調用。

經典的解決方案是使用閉包來保存另一個具有期望值的變量(這裏是我的同名)。它的工作原理是每次迭代都是不同的函數(變量的作用域是全局作用域或聲明它的函數)。

+0

它的工作原理!我一直在嘗試一個多小時。我現在明白了。謝謝! – Kat