2009-12-02 165 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); 
    }); 
});