每个内部都有jquery setTimeout

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

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++; }); 

几点:

  • 在调用回调时, 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)); }); 

这是如此糟糕的设计,除了一个完整的反js模式甚至超越…为什么你会一遍又一遍地定义相同的function!

 $(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); } 

我不是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/ (查看控制台日志)

Interesting Posts