clearInterval()无法单击按钮

时间:2015-04-21 18:18:16

标签: javascript jquery setinterval clearinterval

我有一个带有两个按钮的HTML页面,我想在单击开始按钮时使用setInterval多次评估该功能。这工作得很好,但我无法清除间隔。我做错了什么?

function intFunc (func, time) {
     interval = setInterval(func, time);
}

$("#startButton").on("click", intFunc(function () {
        $.post('link/to/php.php', function(data) {
                 //do something with data
        });
}, 1000));

$("#stopButton").on("click", function () {
         clearInterval(interval);
});

2 个答案:

答案 0 :(得分:2)

首先,正如评论建议您应在上面声明interval以确保范围明确。

其次,您有语法问题。您立即调用intFunc,并将结果传递给$("#startButton").on()。这不是你想要的。你应该传递的是第二个参数是一个回调函数。您可以像这样重新组织您的代码:

第三,在自动调用匿名函数中声明将防止污染全局范围。

(function() {
    var interval;

    $("#startButton").on("click", function(){
        interval = setInterval(function () {
            $.post('link/to/php.php', function(data) {
               //do something with data
            });
        }, 1000);
    });

    $("#stopButton").on("click", function () {
        clearInterval(interval);
    });
})();

答案 1 :(得分:1)

这是您应该(或可能)编写它的方式:

var interval;
$("#startButton").on("click", function(){
      interval = setInterval(function () {
         $.post('link/to/php.php', function(data) {
               //do something with data
         });
      }, 1000);
});

$("#stopButton").on("click", function () {
         clearInterval(interval);
});

你不能使用这样的功能,因为当你写:

$("#startButton").on("click", intFunc(..));

您正在立即执行intFunc,并且不会返回任何内容。