在jquery中的.each之后调用代码

在jquery中的.each之后调用代码,jquery,Jquery,我正在将文件上载到服务器,希望在所有文件上载完毕后关闭一些按钮。文件上载到一个。每个,因此代码应该在该文件之后运行。我一直在研究这个问题,发现。每个都是同步的,所以如果我把代码放在之外,它应该可以工作。每个都不工作 我想知道这是否是因为在中,每个都有一个ajax调用 我也看到过循环时计数的例子,在最后一次迭代中调用代码,但我想知道是否有更干净的方法来做到这一点 当前基本代码-不工作 $.each( function () { ... }); $("#btnNext").removeAttr(

我正在将文件上载到服务器,希望在所有文件上载完毕后关闭一些按钮。文件上载到一个
。每个
,因此代码应该在该文件之后运行。我一直在研究这个问题,发现
。每个
都是同步的,所以如果我把代码放在
之外,它应该可以工作。每个
都不工作

我想知道这是否是因为在
中,每个
都有一个ajax调用

我也看到过循环时计数的例子,在最后一次迭代中调用代码,但我想知道是否有更干净的方法来做到这一点

当前基本代码-不工作

$.each( function () {
  ...
});
$("#btnNext").removeAttr("hidden") //want this to run after
我还尝试了一个在控制台出错的承诺

$.each( function () {
  ...
}).promise().done(function() {
    $("#btnNext").removeAttr("hidden")
});
我想知道这是否是因为在中。每个中都有一个ajax调用

这就是原因。AJAX调用是异步的,因此
removeAttr()
调用将在这些请求完成之前很久发生

要解决此问题,请存储从数组中的AJAX调用返回的延迟对象,然后将它们应用于
$.when()
。在的回调中,您可以在所有请求完成后执行需要运行的任何逻辑

var requests = [];
$.each( function () {
  requests.push($.ajax({
    // your ajax options here...
  }));
});

$.when.apply($, requests).done(function() {
  $("#btnNext").removeAttr("hidden");
});

@利亚姆:他不想归还任何东西,只是等他们全部完成。