Javascript clearInterval()不适用于按钮单击

Javascript clearInterval()不适用于按钮单击,javascript,jquery,setinterval,clearinterval,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) {

我有一个带有两个按钮的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);
});

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

其次,您有语法问题。您正在直接调用
intFunc
,并将结果传递给
$(“#开始按钮”).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);
    });
})();

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

其次,您有语法问题。您正在直接调用
intFunc
,并将结果传递给
$(“#开始按钮”).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);
    });
})();

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

其次,您有语法问题。您正在直接调用
intFunc
,并将结果传递给
$(“#开始按钮”).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);
    });
})();

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

其次,您有语法问题。您正在直接调用
intFunc
,并将结果传递给
$(“#开始按钮”).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);
    });
})();
这是您应该(或可能)编写它的方式:

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,但不会返回任何内容。

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

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,但不会返回任何内容。

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

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,但不会返回任何内容。

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

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,但这不会返回任何内容。

clearInterval()函数的代码在哪里,还是它是一个内置函数?它是一个内置函数可能是一个范围问题。在你的点击功能中尝试
console.log(interval)
来检查是否传递了interval。另外,你的
on(“点击,
应该是
on”(“点击,
输出),只是一个输入错误,我必须手动编写代码,clearInterval()的代码在哪里函数还是内置函数?这是内置函数可能是作用域问题。请尝试单击函数中的
console.log(interval)
,检查是否传递了interval。此外,您的
on(“单击,
应该是
on”(“单击”),
oups,只是一个输入错误,我必须手动编写代码clearInterval()函数的代码在哪里?它是一个内置函数吗?它是一个内置函数可能是一个范围问题。请尝试在您的click函数中使用
console.log(interval)
来检查是否传递了interval。此外,您的
on(“单击,
应该是
on”()单击“,
oups,只是一个输入错误,我必须手动编写代码clearInterval()函数的代码在哪里?它是内置函数吗?它是内置函数可能是一个范围问题。请尝试单击函数中的
console.log(interval)
,检查是否传递了interval。此外,
打开(“单击,
应该是打开的(“单击”,oups,只是一个输入错误,我不得不手动编写代码。我认为你应该给出一个清晰的例子,说明如何停止一个间隔,而不是这个。@AndrewLavers,noob问题,但是说
var interval;
u的意思是但是
var interval;
在全局范围内?@AlexanderSolonik谁说它是全局的?你真的应该尽可能少地做可以在全局范围内使用闭包。使用闭包,它本质上只是将代码包装在一个函数中,如so
(function(){/*…code位于它自己的范围内…*/})(
)。这样可以隔离代码,可以做很多事情,但不能放入注释中:-@ejsh,感谢Aloot:)我正在学习IIFE,我必须说它们很强大。@EJTH是正确的,应该尽可能避免全局范围。我将编辑答案以包含这一点并停止间隔。我认为你应该就如何停止间隔而不是这一点给出一个清晰的例子。@AndrewLavers,noob问题,但通过说
var interval;
u mean但是
var interval;
在全局范围内?@AlexanderSolonik谁说它是全局的?你真的应该在全局范围内尽可能少地做。使用闭包,它本质上只是将你的代码包装在一个函数中,比如
(函数(){/*…代码在它自己的范围内…*/})()
!这样你就可以隔离你的代码,你可以用它做很多事情,但这不适合一个公司