2009-12-02 104 views
90

如何停止并开始setInterval如何停止“setInterval”

假设我有textarea。我想停止焦点并重新启动setInterval关于模糊(使用jQuery)。

+0

你有一个例子: [此处输入链接的描述] [1] [1]:http://stackoverflow.com/questions/7483525/pausing-setinterval-when-page-browser-is-out-of-focus – 2012-03-14 15:47:14

+11

只需要点击一下鼠标接受的答案。它也可以帮助其他人在许多答案中看到正确的答案。 CLICK – Onimusha 2013-02-04 12:50:36

回答

151

你要存储的间隔计时器ID当你启动它,你会使用这个值后,以阻止它,使用clearInterval功能:

$(function() { 
    var timerId = 0; 

    $('textarea').focus(function() { 
    timerId = setInterval(function() { 
     // interval function body 
    }, 1000); 
    }); 

    $('textarea').blur(function() { 
    clearInterval(timerId); 
    }); 

}); 
+5

我建议在'timerId = setInterval'之前添加'if(timerId)clearInteral(timerId)',否则,如果焦点的调用次数多于模糊次数,则不能保证间隔被清除。当测试这个时,我几次看到这种情况(在IE10上)。 – 2012-11-07 06:01:45

+0

@PatrickKlug你的权利!我需要'if(timerId)clearInteral(timerId)'也 – bobbyrne01 2012-12-31 01:36:10

18

商店中的setInterval回变量,稍后使用它来清除间隔。

var timer = null; 
$("textarea").blur(function(){ 
    timer = window.setInterval(function(){ ... whatever ... }, 2000); 
}).focus(function(){ 
    if(timer){ 
     window.clearInterval(timer); 
     timer = null 
    } 
}); 
10

的setInterval返回你可以用它来取消间隔与clearInterval()

+0

但我怎么能实现这个$ .live或$ .listen – testkhan 2009-12-02 07:23:32

+1

'$ .live'目前不支持'focus'和'blur'事件。 – 2009-12-02 07:29:54

22

这是基于CMS的答案的ID。问定时器的问题上模糊重新启动和停止对焦点,所以我把它周围一点点:

$(function() { 
    var timerId = 0; 

    $('textarea').focus(function() { 
    clearInterval(timerId); 
    }); 

    $('textarea').blur(function() { 
    timerId = setInterval(function() { 
    //some code here 
    }, 1000); 
    }); 
});