2014-01-19 31 views
0

我有一個包含setTimeout()方法的函數。檢查活動計時器(setTimeout)

我有一個調用該函數的按鈕,因此您可以多次點擊此按鈕並根據需要多次調用此函數。

只有在沒有其他具有活動計時器的函數的實例時,纔有實際執行此函數的方法嗎?

+2

向我們展示的代碼,你顯然有一些事件處理程序和已超時。 – adeneo

回答

2

您將不得不跟蹤以前是否設置了此計時器,以及是否通過使用某種變量來保持多個按鈕按下的範圍。

沒有內置函數可以告訴您使用此按鈕啓動的計時器是否仍在運行。你必須創建你自己的。它可以這樣工作:

var buttonTimer; 
function myButtonClick() { 
    if (!buttonTimer) { 
     buttonTimer = setTimeout(function() { 
      buttonTimer = null; 
      // put your timer code here 
     }, 2000); 
    } 
} 

只要有一個當前活動的計時器,這將忽略按鈕點擊。當沒有定時器運行時,它將設置一個新的定時器。

由於您要跟蹤實際的計時器ID,您還可以自由執行其他行爲,例如取消以前的計時器(例如停止按鈕),或通過取消計時器將計時器重置爲新的時間間隔先前的定時器,然後設置一個新的。

0

試試這個:

var Timer = function() { 
    var self = this; 
    this.running = false; 
    this.run = function() { 
     if(!self.running) { 
      self.running = true; 
      console.log('starting run'); 
      setTimeout(function() { 
       self.running = false; 
       console.log('done running!'); 
      }, 5000); 
     } else { 
     console.log('i was running already!'); 
     } 
    } 
    return this; 
} 
var aTimer = new Timer(); 

,並添加一個按鈕,用於測試目的:

<button onclick="aTimer.run()">Run!</button> 

小提琴:http://jsfiddle.net/kukiwon/FCuNh/