2013-02-15 53 views
0

我有這樣的功能:重複的倒計時

var secondsRemaining = 45; 

function countdown(secondsRemaining) { 
var seconds = secondsRemaining; 
if (secondsRemaining > 0) { 
$('.timer > div').html(seconds); 
secondsRemaining--; 
} else { 
if (secondsRemaining == 0) { 
    // Times up .... 
} 
} 
setInterval(function() { 
countdown(secondsRemaining); 
}, 1000); 
} 

我運行的功能在文檔準備函數:

countdown(secondsRemaining); 

,也是我再次運行它,我點擊了之後回答。 問題是我現在有兩個倒數計時器同時運行,從45秒開始的新計時器和從那裏繼續的舊計時器。

+0

什麼是預期行爲? – dfsq 2013-02-15 13:37:27

+3

如果你不想要兩個,不要再調用它? – 2013-02-15 13:37:40

+0

'setTimeout' /'setInterval'不準確,不應用於倒計時。 – Bergi 2013-02-15 13:48:58

回答

0

使用clearInterval()

首先,存儲第一setInterval()的間隔ID:

var secondsRemaining = 45; 

function countdown(secondsRemaining) { 
var seconds = secondsRemaining; 
if (secondsRemaining > 0) { 
$('.timer > div').html(seconds); 
secondsRemaining--; 
} else { 
if (secondsRemaining == 0) { 
    // Times up .... 
} 
} 
myinterval=setInterval(function() { //myint now contains the interval id 
countdown(secondsRemaining); 
}, 1000); 
} 

現在,當用戶點擊,建立一個新的間隔之前,取消與clearInterval()第一個:

button.onclick=function(){ 
    //do stuff 
    clearInterval(myinterval) 
    setInterval(function() { 
    countdown(secondsRemaining); 
    }, 1000); 
    // do stuff 
} 
0

對不起,我真的不明白你說的這個問題的方式似乎是說你意圖lly想要啓動兩個時間事件,一個是文檔加載時,另一個是當你點擊同時輸出到同一個元素的答案時。

如果問題是你希望它有兩種不同元素的輸出,那麼你可以將元素的參數,你可以使用:如果你想使用相同的元素

countdown($('.pick-me'), secondsRemaining); 

,那麼你可以隨時清除每次點擊的時間間隔,然後設置新事件的時間間隔,剛剛得到更新並看到Manishearths響應,因此不會進一步詳細瞭解它,因爲這可能是您正在尋找的答案。