【发布时间】:2011-06-22 11:50:01
【问题描述】:
我只想在 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),但这似乎没有帮助。
有没有明智的做法?
【问题讨论】:
-
JOOI - 什么是 $(element).load() ?据我所知,它不在标准 API 中。
-
啊,那个!当然 - 我以为你是在触发负载,而不是绑定'onload'回调:)