javascript – jquery动画回调 – 如何传递参数回调

我从多维数组构建一个jquery动画,在每次迭代的回调中,我想使用数组的元素.不过不知何故,我总是最终得到数组的最后一个元素,而不是所有不同的元素.

HTML:

< div id =“square”style =“background-color:#33ff33; width:100px; height:100px; position:absolute; left:100px;”>< / div>

JavaScript的:

$(document).ready(function () {

// Array with Label, Left pixels and Animation Lenght (ms)
LoopArr = new Array(
    new Array(['Dog', 50, 500]),
    new Array(['Cat', 150, 5000]),
    new Array(['Cow', 200, 1500])
);

$('#square').click(function() {

for (x in LoopArr) {
    $("#square").animate({ left: LoopArr[x][0][1] }, LoopArr[x][0][2], function() {
        alert (LoopArr[x][0][0]);
    });
}

});

});

`

当前结果:牛,牛,母牛

所需成果:狗,猫,母牛

如何确保在回调中返回相关的数组元素?

问题是x在回调评估时被修改.您需要为其创建单独的闭包:

for (x in LoopArr) {
    $("#square").animate({ left: LoopArr[x][0][1] }, LoopArr[x][0][2], 
      (function (z) {
        return function() {
            alert (LoopArr[z][0][0]);
        }
    })(x));
}

我已经将参数重命名为z,以便进行说明,您将x作为参数传递给函数,该函数返回一个使用范围z变量的函数,该变量在传递时存储x的状态.

翻译自:https://stackoverflow.com/questions/2546143/jquery-animation-callback-how-to-pass-parameters-to-callback

转载注明原文:javascript – jquery动画回调 – 如何传递参数回调