分類
Javascript

How to clear all javascript timeouts?

Javascript setTimeout() 提供一個function讓開發者可以延遲時間後執行片段程式碼,如要終止此timeout行為,我們可以使用 clearTimeout 這個function,這篇文章簡單聊聊要怎麼一次清掉頁面上所有timeout functions。

var timeoutID = scope.setTimeout(function[, delay, param1, param2, ...]);
var timeoutID = scope.setTimeout(function[, delay]);
var timeoutID = scope.setTimeout(code[, delay]);
The returned timeoutID is a positive integer value which identifies the timer created by the call to setTimeout(); this value can be passed to clearTimeout() to cancel the timeout.

簡單說,setTimeout會回傳給你一個timeout ID,後續可以用這個ID來清掉timeout;但如果今天你要寫一個function去清掉頁面上的所有timeout,由於我們並不知道頁面上有哪些timeout ID,所以這時候的小技巧是先新增一個無功能的timeout,在遞減向下清除所有timeout即可,程式碼如下:

function clearAllTimeouts()
{
    var id = window.setTimeout(null,0);
    while (id--) 
    {
        window.clearTimeout(id);
    }
}