是否可以将单个参数传递给$ .when,其中包含两个延迟对象?

Spy*_*cho 3 jquery jquery-deferred

我想只在jQuery对象中的所有图像都已加载时执行一些代码.我可以这样做:

var img1Load = $.Deferred();
$('#img1').load(img1Load.resolve);

var img2Load = $.Deferred();
$('#img2').load(img2Load.resolve);

$.when(img1Load, img2Load).done(function(){
    console.log('both imgs loaded');
});
Run Code Online (Sandbox Code Playgroud)

这没关系,但我不想为每个图像定义一个单独的延迟对象.如果有数百个或者某个页面上是否有或不存在该怎么办?我想一次完成所有这些,例如:

$.when(allImagesHaveLoaded).done(function(){
    console.log('all imgs loaded');
});
Run Code Online (Sandbox Code Playgroud)

我尝试创建一个allImagesHaveLoaded迭代图像的函数,为每个图像创建一个新的延迟对象.麻烦的是,如果我返回一个这样的数组用作when的参数,它就不起作用(因为它不是延迟对象,它是一个延迟对象的数组).

我也$.Deferred.pipe有点摆弄(尝试创建一个链接的延迟对象传递给when),但这似乎没有帮助.

这样做有明智的方法吗?

Aln*_*tak 6

有一种方法可以将延迟对象数组传递给$.when:

$.when.apply($, myArray).done(...);
Run Code Online (Sandbox Code Playgroud)