销毁以前的setInterval

问题描述 投票:15回答:3

我想要一个函数来设置Ajax和重载计时器。下面的代码不会破坏以前的函数调用计时器,所以每次调用它时我都会得到另一个计时器。我怎么能破坏以前的计时器?

function initNowPlayingMeta(station) {
    $('#cancion').children().remove();
    $('#cancion').load('sonando.php?emisora=' + station);
    var prevNowPlaying = setInterval(function () {
        $('#cancion').load('sonando.php?emisora=' + station);
    }, 5000);
}
javascript
3个回答
31
投票

您需要将定时器引用存储在局部范围之外的某处(这实际上意味着在函数外部使用var声明它)。然后,用clearInterval清除它:

var prevNowPlaying = null;

function initNowPlayingMeta(station) {
    if(prevNowPlaying) {
        clearInterval(prevNowPlaying);
    }
    $('#cancion').children().remove();
    $('#cancion').load('sonando.php?emisora=' + station);
    prevNowPlaying = setInterval(function () {
        $('#cancion').load('sonando.php?emisora=' + station);
    }, 5000);
}

4
投票

clearInterval

clearInterval(prevNowPlaying);

您还希望在尝试取消的任何地方,从之前的调用中进行prevNowPlaying


0
投票

您需要明确清除计时器。

var prevNowPlaying;
function initNowPlayingMeta(station) {
    $('#cancion').children().remove();
    $('#cancion').load('sonando.php?emisora=' + station);
    if (prevNowPlaying === undefined) clearInterval(prevNowPlaying);
    prevNowPlaying = setInterval(function () {
        $('#cancion').load('sonando.php?emisora=' + station);
    }, 5000);
}
© www.soinside.com 2019 - 2024. All rights reserved.