将动态参数传递给循环中的回调函数

时间:2017-01-12 09:37:33

标签: javascript jquery function callback

我想动态设置一些jQuery动画。

代码:

function anim(data) {
    for (index in data) {
        (function(){
            var props = {};
            props[data[index].property] = data[index].value;
            data[index].elem.animate(
                props,
                500,
                function() {
                    data[index].callback();
                }
            );
        })();
    }
}

var data =[
    {
        elem: elem1,
        property: 'prop1',
        value: 'val1',
        callback: function() {
            console.log('callback1');
        }
    },
    {
        elem: elem2,
        property: 'prop2',
        value: 'val2',
        callback: function() {
            console.log('callback2');
        }
    },
];
anim(data);

问题是绑定回调。触发回调时,data[index]在当前范围内不可用。有人能告诉我如何设置这些回调吗?

2 个答案:

答案 0 :(得分:4)

在这里,您使用closure Immediately-invoked function expression。您必须将data[index]作为参数传递。

(function(dindex){
        var props = {};
        props[dindex.property] = dindex.value;
        dindex.elem.animate(
            props,
            500,
            function() {
                dindex.callback();
            }
        );
 })(data[index]);

答案 1 :(得分:2)

您可以尝试这样做,

function anim(data) {
    $.each(data, function(x,y){
         var props = {};
         props[y.property] =y.value;
         y.elem.animate(
             props,
             500,
             function() {
                    y.callback();
             }
         );
    });


}