在这种情况下如何使用javascript cleanTime?

时间:2012-05-28 00:58:54

标签: javascript jquery

我需要清除超时,我无法弄清楚如何。我不确定从window对象传递clearTimeout方法的内容...任何提示?

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

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

                          //do something

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

               }

2 个答案:

答案 0 :(得分: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

答案 1 :(得分: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)对同时运行太多超时的反应很差。