销毁以前的setInterval

时间:2011-01-19 00:58:39

标签: javascript

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

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

3 个答案:

答案 0 :(得分: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);
}

答案 1 :(得分:4)

clearInterval

clearInterval(prevNowPlaying);

如果您尝试取消,您还希望在之前的通话中进行prevNowPlaying

答案 2 :(得分: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);
}