我的代码是这样的:
window.setInterval(updateSeconds, 1000);
function updateSeconds() {
var remainingSeconds = $('#seconds').html() - 1;
if(remainingSeconds < 0) {
remainingSeconds = 0;
}
$('#seconds').html(remainingSeconds);
if(remainingSeconds == 0) {
//stop calling updateSeconds
}
}
没有问题,除了setInterval仍会继续调用updateSeconds()之外,有没有办法停止它?
最佳答案
是的,您可以使用clearInterval
停止计时器:
// Added `var handle`:
var handle = window.setInterval(updateSeconds, 1000);
function updateSeconds() {
var remainingSeconds = $('#seconds').html() - 1;
if(remainingSeconds < 0) {
remainingSeconds = 0;
}
$('#seconds').html(remainingSeconds);
if(remainingSeconds == 0) {
//stop calling updateSeconds
window.clearInterval(handle); // <== added
handle = 0; // <== added
}
}
如果您的代码在全局范围内,则可能不想创建一个名为
handle
的新全局变量。您可以通过将其包装在函数中然后立即执行该函数来避免这种情况:(function() {
var handle = window.setInterval(updateSeconds, 1000);
function updateSeconds() {
var remainingSeconds = $('#seconds').html() - 1;
if(remainingSeconds < 0) {
remainingSeconds = 0;
}
$('#seconds').html(remainingSeconds);
if(remainingSeconds == 0) {
//stop calling updateSeconds
window.clearInterval(handle);
handle = 0;
}
}
})();
现在
handle
和updateSeconds
是匿名函数专用的。 (显然,如果您需要从其他地方调用updateSeconds
,则将其设为私有将是一个问题。)但是,如果它们已经在某个内部(可能是事件处理函数)中,那么您已经在其中拥有了一个私有作用域,并且不需要这样做。