0

我在这里有一个循环内的动画问题。输出就像我猜的那样,但不是我想要的。

for (var i = 0; i < slots.length; i++) {
  $('#slot-'+i).animate({
    marginTop: -10
  }, 200, function() {
    console.debug(i);
    if (i == 0) somefunction();
  });
}

问题是 console.debug(i) 每次都输出 for 循环的最后一个索引。

我想要实现的是:在动画的完整功能中,我想调用一个函数 - 但只有一次。

4

2 回答 2

3
for (var i = 0; i < slots.length; i++) {
    $('#slot-' + i).animate({
        marginTop: -10
    }, 200, (function(count) {
        return function() {
            console.debug(count);
            if (count == 0) somefunction();
        };
    })(i));
}

这里的问题是,除非您使用立即调用的函数表达式来为每次迭代返回适当的成功处理程序,否则所有处理程序都将引用 i 的相同值。

于 2012-10-18T10:31:19.323 回答
0

试试这个:

var i = 0;
for (i=0; i < slots.length; i++) {
$('#slot-'+i).animate({
    marginTop: -10
  }, 200, function() {
    console.debug(i);
    if (i == 0) somefunction();
  });
}
于 2012-10-18T10:33:48.823 回答