2016-08-18 31 views
-1
clearInterval(interval) 
var interval = setInterval(function(){ 
    console.log('running') 
},1000); 

我在點擊事件中有上述代碼,console.log('running')在我執行上面的代碼時會被多次觸發,爲什麼?在運行setInterval之前,我已經先清除了間隔。重置時間間隔在JavaScript中不起作用

+4

在創建之前清除'interval' ... –

+1

並且只運行一次,如果我在setInterval之後放置clearInterval,則意味着它將在未運行時結束,請使用'setTimeout'代替 – Drkdra

+0

@RoryMcCrossan。 –

回答

2

假設你的代碼看起來是這樣的:

$('#someButton').on('click', function() { 
    clearInterval(interval) 
    var interval = setInterval(function(){ 
     console.log('running') 
    },1000); 
}); 

那麼您遇到的問題是所有做的範圍。第二次單擊按鈕時,該函數將運行,但不會引用第一次運行時在該函數內創建的任何變量。 (嘗試將console.log(interval)作爲點擊處理函數的第一行)。爲了解決這個問題,你需要在的地方保留一個對點擊處理程序可以訪問的地方。例如:

var interval = null; 

$('#someButton').on('click', function() { 
    clearInterval(interval) 
    interval = setInterval(function(){ 
     console.log('running') 
    },1000); 
}); 

What is the scope of variables in JavaScript?參見用於在動作範圍的一些例子。

0

好吧,現在我明白你的問題了。您需要在更高範圍內聲明interval(如果需要,則爲全局)。 您的問題是interval varible是在click函數內聲明的,因此它是一個本地變量,您需要將它保留在別處以訪問該引用以清除它。

試試這個,不要把所有這些放在click函數中,把它放在與click函數相同的級別上應該可以工作。

var interval; 

function doInterval() { 
    if (interval != undefined) clearInterval(interval); 
    interval = setInterval(function(){ 
     console.log('running'); 
    },1000); 
} 

P/S:你應該編輯你的問題來澄清問題。