2015-06-14 168 views
0

長話短說:如果間隔計數超過5,代碼應清除間隔,從而阻止它每秒執行一次函數。但這似乎並不奏效。jQuery - clearInterval似乎不工作

HTML

<div id='feedback'></div> 

的JavaScript/jQuery的

window.intervalcount = 0; 

var interval = setInterval(function() { 
    intervalcount += 1; 
    $("#feedback").text(intervalcount); 
}, 1000); 

if(intervalcount > 5) { 
    clearInterval(interval); 
} 

但我似乎無法找到問題...

回答

6

所以目前,您的代碼將類似這樣的順序運行的東西:

window.intervalcount = 0; 

// Interval is defined here 
var interval = setInterval(function() { 
    intervalcount += 1; 
    $("#feedback").text(intervalcount); 
}, 1000); 

// will be 0 still 
if(intervalcount > 5) { 
    clearInterval(interval); 
} 

// 1 second after the interval is defined: 
    intervalcount += 1; // now equals 1 
    $("#feedback").text(intervalcount); 

// 2 seconds after defined: 

    intervalcount += 1; // now equals 2 
    $("#feedback").text(intervalcount); 

// etc, forever 

配售:

if(intervalcount > 5) { 
    clearInterval(interval); 
} 

間隔的功能將執行所需的行爲中。

2

您需要if回調中本身就像

window.intervalcount = 0; 

var interval = setInterval(function() { 
    intervalcount += 1; 
    $("#feedback").text(intervalcount); 
    if(intervalcount > 5) { 
     clearInterval(interval); 
    } 
}, 1000); 

這是因爲您的代碼不會按順序執行。相反,之前因爲它們執行

+0

這是因爲對於intervalcount的原始檢查只執行一次,通過將該檢查放入setInterval回調中,每次調用該間隔時都會執行該檢查。 – Charlie

2

你試圖設置後立即執行clearInterval()任何間隔時間執行該if將執行。發生這種情況之前任何秒鐘已過。首先你設置了間隔,然後你檢查是否有任何已經過去(他們沒有),然後五秒鐘後它是時間來清除間隔 - 但到那時它已經運行。

也許你的意思是檢查期間執行每次?

var interval = setInterval(function() { 
    if(intervalcount > 5) { 
     clearInterval(interval); 
    } else { 
     intervalcount += 1; 
     $("#feedback").text(intervalcount); 
    } 
}, 1000); 
+0

「你在執行clearInterval()後立即執行」 - 實際上根本不執行它,因爲執行'if'語句時'intervalCount'爲'0'。 –