JS循环结束时jQuery hide()

时间:2013-07-20 22:22:11

标签: javascript jquery

我有这个JS循环:

          for (var i = 0; i < jsArr.length; ++i) {
            $.post("checkdata.php", { names: jsArr[i], platforms: "1" })
            .done(function(data) {
                eval(data);
            });
          }

data是一些jQuery CSS操作。我有一个加载图像位于“loadingImg”div类下面,该类在页面加载时显示。 checkdata.php根据API https://www.xboxleaders.com/

检查names

在循环和jQuery $('#loadingImg').hide();进程完成后,完成.done(隐藏图像)的最佳方法是什么?

我考虑过在循环之后添加它,但这并不能保证checkdata已经完成。

4 个答案:

答案 0 :(得分:3)

$。何时可以用来组合延迟,并在解决所有这些延迟后解决。

var defs = [];
for (var i = 0; i < jsArr.length; ++i) {
  defs.unshift($.post("checkdata.php", { names: jsArr[i], platforms: "1" }));
  defs[0].done(function(data) {
    eval(data);
  });
}

$.when.apply($, defs).done(function() {
  $('#loadingImg').hide();
});

答案 1 :(得分:1)

使用计数器:

      var counter = 0;
      for (var i = 0; i < jsArr.length; ++i) {
        $.post("checkdata.php", { names: jsArr[i], platforms: "1" })
        .done(function(data) {
            counter++;
            eval(data);
            if(counter == jsArr.length){
                $('#loadingImg').hide();
            }
        });
      }

答案 2 :(得分:0)

答案 3 :(得分:0)

一个解决方案是创建一个与jsArr具有相同数量元素的第二个数组。在每个.done上,将第二个数组的相应索引设置为true。然后在每次调用.done时,检查第二个数组的所有值是否为真,如果是,则隐藏。 (或者您可以将一个新值推入第二个数组并检查数组的长度是否相同以使隐藏生效)

doneChecks = [];
for (var i = 0; i < jsArr.length; ++i) {
    $.post("checkdata.php", { names: jsArr[i], platforms: "1" })
        .done(function(data) {
            doneChecks.push(true);
            eval(data);
            if (doneChecks.length == jsArr.length)
                $('#loadingImg').hide(); 
    });
}