Javascript 使用ajax+;jquery';s after()函数,现在等待加载图像
您好,我使用ajax和json进行无限滚动,然后创建一个html字符串添加到我的网页中,并使用jQuery的after()函数调用它Javascript 使用ajax+;jquery';s after()函数,现在等待加载图像,javascript,jquery,ajax,jquery-after,Javascript,Jquery,Ajax,Jquery After,您好,我使用ajax和json进行无限滚动,然后创建一个html字符串添加到我的网页中,并使用jQuery的after()函数调用它 $('.product-panel:last').after(productHTML); 现在,我需要等待加载新productHTML字符串中的所有图像,然后调用我创建的另一个javascript函数进行格式化 我试着 $('.product-panel:last').after(productHTML).promise().done(fu
$('.product-panel:last').after(productHTML);
现在,我需要等待加载新productHTML字符串中的所有图像,然后调用我创建的另一个javascript函数进行格式化
我试着
$('.product-panel:last').after(productHTML).promise().done(function(){
doMoreStuff();
});
它不起作用。有人能帮忙吗?谢谢
编辑:在遵循adeneo的代码之后,这是我的最终结果,它工作完美无瑕
var productLength = $('.product-panel').length-1;
$('.product-panel:last').after(productHTML);
var images = $(".product-panel:gt("+productLength+")").find('img');
var promises = [];
images.each(function(idx, img) {
var def = $.Deferred();
img.onload = def.resolve;
img.onerror = def.reject;
if ( img.complete ) def.resolve();
promises.push(def.promise());
});
$.when.apply($, promises).done(function() {
productHeight();
});
这并不是那么容易,您必须找到所有插入的图像,然后等待它们单独加载,类似这样
var images = $('.product-panel:last').after(productHTML).next().find('img');
var promises = [];
images.each(function(idx, img) {
var def = $.Deferred();
img.onload = def.resolve;
img.onerror = def.reject;
if ( img.complete ) def.resolve();
promises.push(def.promise());
});
$.when.apply($, promises).done(function() {
// all images loaded
});
看来这对我很有效 我从json生成html的地方放了一个imageCount变量, 然后将imagesLoaded的计数器设置为0。然后在每次图像加载后调用$(img).load()函数,然后我只是不断检查imageCount和imagesLoaded是否相同
var imagesLoaded = 0;
$('.product-panel:last').after(productHTML);
$('img').load( function() {
imagesLoaded++;
if(imagesLoaded == imageCount){
console.log("all images loaded");
productHeight();
}
});
您尝试过。
load()
与.after()
相反吗?如果我尝试使用load()(不太熟悉)而不是after(),我将如何告诉它将新html字符串放置在何处?不过,我现在将更深入地研究它,看看我是否能找到它。如果您能看到一些可以使用.load()
,然后运行。after()
检查的内容,那么您就可以这样做了。祝你好运,让我知道它是怎么回事。load
是$的快捷方式。get
,它是$的快捷方式。ajax
,它与after
这是一种DOM插入方法没有任何共同之处,比如append
,insertAfter
,prepend
等?我在after()之后尝试了load()而且它似乎按照我的要求工作。var def=$.Deferred代码>未调用()
在def处返回未定义不是函数
。解析
我尝试过,但无法使其工作。$。迪雷德在给我打电话error@guest271314-不仅仅是$.Deferred
这是小提琴的问题,而是def.resolve
是一个函数,请注意,我将它作为回调函数引用,而def.done
不存在。但是它应该有调用,所以我已经添加了,谢谢。@Jay-做了一个小小的改变,现在就试试。太棒了!这正是我现在想要的。我不得不对第一行做一些小改动