2011-10-11 48 views
3

多個實例我有一個的jsfiddle這裏:http://jsfiddle.net/dztGA/22/使用的setInterval

目標:從本質上講,我想有一個可以被摧毀,並在鼠標懸停重新創建在同一頁上2個離散定時器/鼠標暫停(暫停)或手動進行(重新啓動)。

問題:什麼我的jsfiddle的單定時器說明的是,當我點擊「停止計時器」,我的setInterval(存儲在變量t)似乎有多個實例儘管有clearInterval(T)被破壞。當我點擊「重新啓動定時器」時,這變得很明顯,它似乎有2個獨立的定時器,如快速增量所示。

一個警告:我有儘可能多的研究做了這樣我就可以了,而是因爲我就做在頁面上2個不同的滑塊,我不能使用任何「清除所有的計時器」的方法,所以我嘗試將每個存儲在一個變量中。

我希望這很清楚。感謝您的觀點。

+0

不能欺騙;在Ubuntu下的Chrome 14 - 工作正常。雖然提到'window.t'和't'取決於你在哪裏給我heebie-jeebies。 –

+0

謝謝@DaveNewton,我想調用window.method(t)推斷清除對象「window」的參數「t」!非常感謝您的洞察力。 –

+0

如果我反覆點擊「重啓計時器」,不點擊其他任何東西,計時器將失控。 – Blazemonger

回答

7

要解決當前的問題:加入clearInterval(window.t)在復位按鈕onclick功能。

一種方法能夠有多個定時器。不過,這需要一定的結構。
小提琴(6定時器!):http://jsfiddle.net/dztGA/27/

(function(){ //Anonymous function, to not leak variables to the global scope 
    var defaultSpeed = 3000; //Used when missing 
    var timerSpeed = [500, 1000, 2000, 4000, 8000]; 

    var intervals = []; 
    function increase(i){ 
     return function(){ 
      var elem = $("#count"+i); 
      elem.text(parseFloat(elem.text()) + 1); 
     } 
    } 
    function clear(i){ 
     return function(){ 
      clearInterval(intervals[i]); 
     } 
    } 
    function restart(i){ //Start AND restart 
     return function(){ 
      clear(i)(); 
      increase(i)(); 
      intervals[i] = setInterval(increase(i), timerSpeed[i]||defaultSpeed); 
     } 
    } 
    // Manual increment 
    $('input[name=increment]').each(function(i){ 
     $(this).click(function(){ 
      restart(i)(); 
      increase(i)(); 
     }); 
    }); 

    // Clear timer on "Clear" 
    $('input[name=clear]').each(function(i) { 
     $(this).click(clear(i)); 
    }); 

    // Restart timer on "Restart" 
    $('input[name=reset]').each(function(i) { 
     $(this).click(restart(i)); 

     //Optionally, activate each timer: 
     increase(i)(); 
    }); 
})(); 
+0

我的理解是,我在window對象上調用了.clearInterval方法,因此暗示了clearInterval(window.t)。無論如何,它的工作到目前爲止,非常感謝! –

+0

已更新的答案。你已經說過你最初想要支持多個定時器;) –

+0

我現在正在編程 - 非常感謝你的出路,幫助指導我的下一步! –

2
// Clear timer on "Clear" 
$('input[name=clear]').click(function() { 
    window.clearInterval(t); 
}); 

應該

// Clear timer on "Clear" 
$('input[name=clear]').click(function() { 
    window.clearInterval(window.t); 
}); 

因爲this是輸入不Window