clearInterval(interval)
var interval = setInterval(function(){
console.log('running')
},1000);
我在点击事件中有上面的代码,当我执行上面的代码时,console.log('running')会多次触发,为什么?我在运行setInterval之前已经先清除了间隔。
答案 0 :(得分:2)
假设您的代码如下所示:
$('#someButton').on('click', function() {
clearInterval(interval)
var interval = setInterval(function(){
console.log('running')
},1000);
});
那么你所遇到的问题与范围有关。第二次单击按钮时,该函数将运行,但在第一次运行时不会引用在函数内创建的任何变量。 (尝试添加console.log(interval)
作为点击处理函数中的第一行)。要解决此问题,您需要在点击处理程序可以访问的位置保留对interval
的引用。例如:
var interval = null;
$('#someButton').on('click', function() {
clearInterval(interval)
interval = setInterval(function(){
console.log('running')
},1000);
});
有关范围的一些示例,请参阅What is the scope of variables in JavaScript?。
答案 1 :(得分:0)
好的,现在我明白了你的问题。您需要在更高的范围内声明interval
(如果需要,则为全局)。
你的问题是interval
变量是在click函数中声明的,因此它是一个局部变量,你需要将它保留在别处以访问引用以便清除它。
试试这个,并且不要把所有这些放在点击功能中,把它放在同一级别上,点击功能应该有效。
var interval;
function doInterval() {
if (interval != undefined) clearInterval(interval);
interval = setInterval(function(){
console.log('running');
},1000);
}
P / S:你应该编辑你的问题以澄清问题。