重置间隔在javascript中不起作用

时间:2016-08-18 14:24:24

标签: javascript jquery

clearInterval(interval)
var interval = setInterval(function(){
   console.log('running')
},1000);

我在点击事件中有上面的代码,当我执行上面的代码时,console.log('running')会多次触发,为什么?我在运行setInterval之前已经先清除了间隔。

2 个答案:

答案 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:你应该编辑你的问题以澄清问题。