Javascript 使用ajax+;jquery';s 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

您好,我使用ajax和json进行无限滚动,然后创建一个html字符串添加到我的网页中,并使用jQuery的after()函数调用它

  $('.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-做了一个小小的改变,现在就试试。太棒了!这正是我现在想要的。我不得不对第一行做一些小改动