根据数组的元素调用函数

时间:2014-10-07 10:27:19

标签: javascript jquery jquery-animate

我是JavaScript和jQuery的初学者,我想知道如何继续这部分代码,

我有一个带回调函数,例如:

myFunc(elem, callback) {
    $(elem).fadeIn(function(){ callback(); });
}

我想为数组中的元素运行此函数:

elems = ['#elem1', '#elem2_3', '#elem4_5', '#elem3', '#elem_five'];

但是,我想通过回调逐个地为数组的每个元素执行此函数。 例如。一旦#elem1有fadein,就必须淡化第二个元素..etc

现在我这样做:

我试过做一个for循环,但它们是在同一时间执行的。

for (i = 0; i < elems.length; i++) { 
    myFunc(elem[i], function(){
        if (elem[i+1]) {
            myFunc(elem[i+1]);
        }
    });
}

那你怎么办?

3 个答案:

答案 0 :(得分:1)

这样做,一个针对您的问题的递归解决方案,

function myFunc(elems, cnt)
{
   if(cnt > (elems.length - 1)) { return; }
   $(elems[cnt]).fadeIn("slow", function(){  myFunc(elems , ++cnt); });
}

myFunc(['#elem1', '#elem2_3', '#elem4_5', '#elem3', '#elem_five'], 0);

DEMO

答案 1 :(得分:0)

 var elems = ['#elem1', '#elem2_3', '#elem4_5', '#elem3', '#elem_five'];
    var len = elems.length;

    function myFunc(index) {
        $(elems[index]).fadeIn(function () {
            if (len > ++index) myFunc(index);
            return;
        });
    }
    myFunc(0);

DEMO

答案 2 :(得分:0)

链接更新: http://jsfiddle.net/kuw6tt92/1/

function fadeIn(selectors) {
    var elements = Array.prototype.slice.call($(selectors));
    function fade() {
        jQuery(elements.shift()).fadeIn("slow", fade);
    }
    fade();
}
fadeIn("div");