我有一个 jQuery ajax 函数,可以将一些内容加载到 div 中,其中一些内容是图像。我想说,直到那些刚刚在我的 ajax 中加载的图像完成加载,然后运行一个功能,例如显示内容。这样,我不会将内容加载到 div 中并且图像开始加载。我希望它们被加载,然后将内容或show()
内容放在 div 中。
我已经看到了很多解决方案,例如 using .load()
,但它似乎不适用于使用 ajax 加载的内容。
您需要在 AJAX 回调中添加加载处理程序,以便将其应用于通过 AJAX 调用加载的图像。您可能还希望设置一个计时器以在一段时间后显示内容,以防图像在加载处理程序应用之前加载。
$.ajax({
...
success: function(data) {
var imageCount = $(data).filter('img').length;
var imagesLoaded = 0;
$(data).hide()
.appendTo('#someDiv')
.filter('img')
.load( function() {
++imagesLoaded;
if (imagesLoaded >= imageCount) {
$('#someDiv').children().show();
}
});
setTimeout( function() { $('#someDiv').children().show() }, 5000 );
}
});
这是tvanfosson提供的代码的更新版本。
您必须确保imageCount
变量正在计算节点列表而不是字符串,因为我可以推断出原始代码中的问题:
$.ajax({
url : 'somePage.html',
dataType : "html",
success : function(data) {
$(data).hide().appendTo('#someDiv');
var imagesCount = $('#someDiv').find('img').length;
var imagesLoaded = 0;
$('#someDiv').find('img').load( function() {
++imagesLoaded;
if (imagesLoaded >= imagesCount) {
$('#someDiv').children().show();
}
});
var timeout = setTimeout(function() {
$('#someDiv').children().show();
}, 5000);
}
});
$("img").load()
将无法工作,因为图像是动态加载的;该命令仅适用于当时页面上的图像。
用于$("img").live("load")
跟踪图像何时加载。