我有一个带有两个按钮的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);
});
答案 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,并且不会返回任何内容。