2012-05-28 32 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尤其是)不良反应有太多的超时运行一次。