jquery - 是否可以将单个参数传递给包含两个延迟对象的 $.when ?

标签 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');
});

这没问题,但我不想为每个图像定义单独的延迟对象。如果有数百个,或者它们可能出现也可能不出现在给定页面上怎么办?我想一次性完成这一切,例如:

$.when(allImagesHaveLoaded).done(function(){
    console.log('all imgs loaded');
});

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

我也稍微摆弄了 $.Deferred.pipe (尝试创建一个链式延迟对象来传递给 when),但这并没有似乎有帮助。

有没有明智的方法来做到这一点?

最佳答案

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

$.when.apply($, myArray).done(...);

关于jquery - 是否可以将单个参数传递给包含两个延迟对象的 $.when ?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6439324/

相关文章:

javascript - jQuery.when 接受原生 Promise 对象吗?

javascript - HTML 文件上传

javascript - 使用 Firebug 查找 JavaScript 中的内存泄漏?

javascript - jQuery Deferred 在失败处理程序后继续解析

jquery - 如何从 jQuery 中的链式延迟返回值?

javascript - jQuery Deferreds & Ajax - 如何访问 jqXHR 对象?

javascript - 如何在 Promise 回调中访问实例变量?

javascript - 为什么带有对象的 typeof 数组返回 "object"而不是 "array"?

javascript - 复制时将任何复制的文本和/或图像更改为我自己的文本

javascript - HighCharts 区域样条线多色渐变不透明度淡入淡出