检查 .ajax 请求后加载的所有图像?

Ged*_*nas 3 javascript ajax jquery

我需要知道何时从附加的 html 源加载所有图像以执行另一个功能。我该如何检查?

$(document).ready(function () {
  $('a.load-more').click(function (e) {
    e.preventDefault();
    $.ajax({
        type: "GET",
        url: $(this).attr('href'),
        data: {
            page: last_id
        },
        dataType: "script",

        success: function () {
            $('.load-more').show();
        }
    });
  });
});
Run Code Online (Sandbox Code Playgroud)

我正在像这样附加 html 源代码:

$('.container').append('<%= escape_javascript(render(:partial => @items)) %>');
Run Code Online (Sandbox Code Playgroud)

它成功地提供了 html 源,但我无法确定何时加载了来自该源的所有图像

.container 每次点击链接时都会更新 <a href="/items" class="load-more">Load more</a>

.container 源代码如下所示:

<ul class="container">
  <%= render @items %>
</ul>
Run Code Online (Sandbox Code Playgroud)

A. *_*lff 5

在所有支持事件捕获阶段的浏览器上,您可以为所有新添加的图像捕获 onload 事件:

document.addEventListener(
    'load',
    function(event){
        var elm = event.target;
        if( elm.nodeName.toLowerCase() === 'img' && $(elm).closest('.container').length && !$(elm).hasClass('loaded')){ // or any other filtering condition
            console.log('image loaded');
            $(elm).addClass('loaded');
            if($('.container img.loaded').length === $('.container img').length) {          
                // do some stuff
                console.log("All images loaded!")
            }
        }
    },
    true // Capture event
);
Run Code Online (Sandbox Code Playgroud)

为了支持例如不处理捕获阶段的 IE8,您应该在将特定图像添加到 DOM 后将 onload 事件设置为特定图像,并将其设置在scriptonload 事件中。