2015-06-14 170 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'。 –