2009-11-01 65 views
11

我有一个jQuery ajax函数,将一些内容加载到div中,其中一些内容是图像。我想说,直到那些刚刚加载到我的ajax中的图像完成加载,然后运行一个函数(如显示内容)。这样,我就不会将内容加载到div中并且图像开始加载。我希望他们被加载,然后把内容,或show()的内容在div中。知道何时完成图像加载AJAX响应

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

回答

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); 
     } 
}); 
+2

+1 - 我非常喜欢这种方法。 – karim79 2009-11-01 21:00:20

+0

我很难得到这个工作。获取一些js错误。有没有人有这样的例子? – 2009-11-01 21:20:46

+0

这个脚本在我调整它之后为我工作...看我的帖子在 – bgreater 2010-06-08 16:49:31

0

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

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

+0

奇。我想说live不支持加载 - 它可能不会 - 但加载事件不会出现在受支持或不受支持的列表中。你有没有测试过,看它是否有效? – tvanfosson 2009-11-01 20:42:18

+0

我想: $( '#productFull IMG')生活( '负荷',函数(){ 警报( '形象装!'); \t \t }); 但是,这似乎并没有工作。这是否需要在ajax函数的范围内? – 2009-11-01 20:44:50

+0

我没有测试过它,如果它不在支持的列表中,它很可能不被支持,因为jQuery很难实现。 – mahemoff 2009-11-01 20:47:45

10

这是最新版本的代码tvanfosson提供的。

你必须确保imageCount变量计算节点列表,而不是一个字符串在原代码的问题,从我可以推断出:

​​
+0

我不明白为什么'++ imagesLoaded'可以工作。 '.load()'似乎没有迭代,如果是这样的话,那么当有多个图像时,不会有'$('#someDiv')。find('img')。load'只会触发第一个图像? – shenkwen 2015-08-15 12:50:31

+0

@shenkwen它的B/C加载事件被添加到从jQuery选择器返回的每个元素。如果这是多个图像,则会执行多个回调函数,并且由于'imagesLoaded' var在回调之外定义,它将迭代。 – bgreater 2015-09-02 13:58:08

相关问题