我的代码就像:
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(),有没有办法阻止它?
答案 0 :(得分:4)
是的,您可以使用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
,将其设为私有将是一个问题。)
但是如果它们已经在某些东西(可能是一个事件处理函数)中,那么你已经有了一个私有范围而且不需要这样做。