2012-05-28 31 views
0

我需要清除超時時間,我不知道如何。我不知道要通過窗口對象的clearTimeout方法傳遞什麼......任何提示?如何在這種情況下使用javascript cleanTime?

   for (var k = 0; k <= arr2.length; k++) { 

        (function (k) { 
         window.setTimeout(function() { 

          //do something 

         }, 6000 * k); 
        })(k); 

       } 
+0

順便說一下,我確實需要「<=」 – RollRoll

回答

3

由於您正在創建arr2.length數量的定時器,如果您需要「殺死」特定的定時器,則需要一個引用數組。

//create a reference storage 
var timerRefs = []; 

for (var k = 0; k <= arr2.length; k++) { 
    (function (k) { 

     //reference the timeout to a variable 
     var ref = window.setTimeout(function() { 
      //do something 
     }, 6000 * k); 

     //store that reference in the array 
     timerRefs.push(ref); 
    })(k); 
} 

清除特定的一個,這樣做:

clearTimeout(timerRefs[N]); //where N is the index of that timer 
+0

這是真棒,有沒有辦法找出從所有開放超時窗口對象並釋放它們?我會應用你的解決方案,但我只是想知道,謝謝 – RollRoll

+0

@EdwinSnts,除非它們在變量中被引用,並且你可以訪問變量的範圍,我認爲你不能。 – Joseph

2

如果你想超時取消,你必須捕獲它的返回值。

var myTimer = setTimeout(...); 

然後,僅僅是值傳遞給函數:

clearTimeout(myTimer); 

個人而言,我會重寫:

(function(inp) { 
    var k = 0, l = inp.length, timer; 
    timer = setInterval(function() { 
     // do something with inp[k]; 
     k++; 
     if(k > l) clearInterval(timer); 
    },6000); 
})(arr2); 

一些瀏覽器(Firefox尤其是)不良反應有太多的超時運行一次。