【问题标题】:jquery setTimeout inside each每个里面的jquery setTimeout
【发布时间】:2013-03-12 12:24:49
【问题描述】:

我有一些与此类似的代码,它在一些图像中移动......它可以工作,但它似乎不尊重计时器

var i = 1;
var indexArray = array(1,2,3);
var timerx = new Array();

$( indexArray ).each(function( indexArraykey ) {

    function internalCallback ( i, indexArraykey ) {
        val = indexArray[indexArraykey];
        console.log("test " + i + val);
    }); 

    timerx[i] = setTimeout( internalCallback( i, indexArraykey ), i * 500000 );                     

    i++;

}); 

【问题讨论】:

  • 为什么要在循环中定义一个函数?

标签: jquery settimeout each arrayiterator


【解决方案1】:

几点:

  • 在调用回调时,i 的值为循环结束。
  • 要使用 jQuery 遍历数组,请使用 $.each(array,,而不是 $(array).each(
  • 函数不必在循环中定义
  • 每个都将索引作为回调的第二个参数,并将值作为第一个参数。

看来你想要的其实是这样的:

var indexArray = array(1,2,3);
var timerx = [];
$.each(indexArray, function( indexArrayValue, i ) {
    timerx.push(setTimeout(function(){
        console.log("test " + i + ' : ' + indexArrayValue);
    }, (i+1) * 500000));
}); 

【讨论】:

  • 使用}); 结束internalCallback 是错误的。 =) 会导致语法错误。
  • 抱歉是错字,代码有效。我尝试修改它并不起作用,但在日志中数字是正确的
  • 其实你在我第一次回答之后就改了代码。我现在认为你真正想要的是我函数末尾的新代码。
【解决方案2】:

我不是 javascript 专家,但看起来这里 internalCallback 被调用而不是作为函数传递给 setTimeout

试试这个:

var i = 1;
var indexArray = [3,6,9];
var timerx = new Array();

$( indexArray ).each(function( indexArraykey ) {

    function internalCallback ( i, indexArraykey ) {
        return function () {
            val = indexArray[indexArraykey];
            console.log("test " + i + val);
        }
    } 

    timerx[i] = setTimeout( internalCallback( i, indexArraykey ), i * 5000);                     

    i++;

}); 

这里是小提琴http://jsfiddle.net/Guxdz/2/(检查控制台日志)

【讨论】:

  • +1 也感谢你,即使我不太清楚为什么:-)
【解决方案3】:

这设计太差劲了,完全是反 js 模式,甚至超越了…… 为什么要一遍遍地定义同一个函数!!!

$(imgNumArray).each(function (indexArraykey) {
    (function (i) {
        timerx[i] = setTimeout(internalCallback(i, indexArraykey), i * 500000);
    })(i++);
});

function internalCallback(i, indexArraykey) {
    val = indexArray[indexArraykey];
    console.log("test " + i + val);
}

【讨论】:

    猜你喜欢
    • 2012-10-06
    • 2014-02-18
    • 2017-05-10
    • 2018-05-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-06-19
    相关资源
    最近更新 更多