当JS循环结束时,jQuery hide()

jQuery hide() when JS loop finishes

本文关键字:jQuery hide JS 循环 结束      更新时间:2023-09-26

我有这个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检查nameshttps://www.xboxleaders.com/

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

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

$when可用于组合延迟,并将在所有延迟都得到解析时进行解析。

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();
});

使用计数器:

      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();
            }
        });
      }

您最好使用瀑布

这个问题会很有帮助。

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

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(); 
    });
}