clearInterval(interval)
var interval = setInterval(function(){
console.log('running')
},1000);
我在點擊事件中有上述代碼,console.log('running')在我執行上面的代碼時會被多次觸發,爲什麼?在運行setInterval之前,我已經先清除了間隔。重置時間間隔在JavaScript中不起作用
clearInterval(interval)
var interval = setInterval(function(){
console.log('running')
},1000);
我在點擊事件中有上述代碼,console.log('running')在我執行上面的代碼時會被多次觸發,爲什麼?在運行setInterval之前,我已經先清除了間隔。重置時間間隔在JavaScript中不起作用
假設你的代碼看起來是這樣的:
$('#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?參見用於在動作範圍的一些例子。
好吧,現在我明白你的問題了。您需要在更高範圍內聲明interval
(如果需要,則爲全局)。 您的問題是interval
varible是在click函數內聲明的,因此它是一個本地變量,您需要將它保留在別處以訪問該引用以清除它。
試試這個,不要把所有這些放在click函數中,把它放在與click函數相同的級別上應該可以工作。
var interval;
function doInterval() {
if (interval != undefined) clearInterval(interval);
interval = setInterval(function(){
console.log('running');
},1000);
}
P/S:你應該編輯你的問題來澄清問題。
在創建之前清除'interval' ... –
並且只運行一次,如果我在setInterval之後放置clearInterval,則意味着它將在未運行時結束,請使用'setTimeout'代替 – Drkdra
@RoryMcCrossan。 –