我正在尝试创建一个按钮,将切换setInterval / clearInterval。 setInterval将正常运行,但是再次单击该按钮时,不会完成clearInterval。这是变量范围问题还是功能设置问题?

http://jsfiddle.net/BxLps/1/

$(function () {
    var int;
    var onrepeat;

    $('button[id^=temp]').click(function () {
        window.id = $(this).attr("value");
        var int = setInterval(doAjax, 3000);

        if (onrepeat == false) {
            $(this).find('i').addClass("fa-spin");
            doAjax();
            int;
            onrepeat = true;
        } else {
            clearInterval(int);
            $(this).find('i').addClass("fa-spin");
            onrepeat = false;
        }
    });
});
function doAjax() {
    $.ajax({
        type: "GET",
        url: "ajax.php",
        data: "a=cur-temp&id=" + id,
        success: function (msg) {
            $("#cur-temp").html(msg);
        }
    })
};

最佳答案

真正的问题是它每次都创建新的间隔。考虑一下,每次“单击”都在运行该代码(因此它正在执行setInterval)。

解决方案是在点击外部声明int一次(也只能声明一次)。然后在条件内移动setInterval

var int;
var onrepeat;

$('button[id^=temp]').click(function () {
    window.id = $(this).attr("value");

    if (onrepeat == false) {
        $(this).find('i').addClass("fa-spin");
        doAjax();
        int = setInterval(doAjax, 3000);
        onrepeat = true;
    } else {
        clearInterval(int);
        $(this).find('i').addClass("fa-spin");
        onrepeat = false;
    }
});

关于javascript - clearInterval未设置,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/20892769/

10-13 01:12