11

我有一个 jQuery ajax 函数,可以将一些内容加载到 div 中,其中一些内容是图像。我想说,直到那些刚刚在我的 ajax 中加载的图像完成加载,然后运行一个功能,例如显示内容。这样,我不会将内容加载到 div 中并且图像开始加载。我希望它们被加载,然后将内容或show()内容放在 div 中。

我已经看到了很多解决方案,例如 using .load(),但它似乎不适用于使用 ajax 加载的内容。

4

3 回答 3

12

您需要在 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 );
      }
});
于 2009-11-01T20:40:08.447 回答
10

这是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);
    }                     
});
于 2010-06-08T16:55:02.983 回答
0

$("img").load()将无法工作,因为图像是动态加载的;该命令仅适用于当时页面上的图像。

用于$("img").live("load")跟踪图像何时加载。

于 2009-11-01T20:38:06.560 回答