2011-08-21 80 views
9

我试图预加载图像夫妇,并希望我的网页去搁置,直到所有图像的加载。所以我正在做的是这样的:IE9问题与jQuery的load()事件不触发

var numPics = $('#bg img').length; 
var picsLoaded = 0; 
$('#bg img').load(function(){ 
    picsLoaded++; 
    if (picsLoaded == numPics){ 
     buildPage(); 
    } 

}); 

这工作正常,除了(你猜对了)IE浏览器。不知怎的,Internet Explorer将下载的所有照片(我可以看到他们被加载在开发工具),但只会随机触发load - 活动(每次刷新都会给我的新号码,它通常会数到一半左右我尝试了不同版本的jQuery(我最初是从1.6.1开始的),并且也已经阅读了关于这个网站的问题,但是找不到任何答案。 。相关的问题,因为它破坏(或追加随机查询字符串的图像源)没有有所作为

回答

15

尝试,以重新分配图像源触发事件:

var numPics = $('#bg img').length; 
var picsLoaded = 0; 
$('#bg img').each(function(index) { 
    var img = $(this); 
    img.load(function(){ 
     picsLoaded++; 
     if (picsLoaded == numPics){ 
      buildPage(); 
     } 
    }); 
    img.attr("src", img.attr("src")); 
}); 
+0

哇,谢谢,这工作就好了!你能告诉我为什么IE会接受这个,而不是旧版本? – m90

+0

总之一句话?微软。又一个愚蠢的“设计”行为让人无法理解。 –

+0

好吧,这是我所期待的,虽然我再度陷入自己希望一个更合乎逻辑的解释!谢谢! – m90

0

+答案:不要在Firefox 3.6中运行以下命令:

img.attr("src", img.attr("src")); 

图像的部分金额将不会被加载!我更喜欢:

if($.browser.msie && parseInt($.browser.version, 10) >= 9) { 
    img_load.attr("src", img_load.attr("src")); 
} 
2

在jQuery 1.8,$ .load()已被弃用(http://bugs.jquery.com/ticket/11733)赞成:

image.bind('load', function() {}); 

还曝出的评论很有趣。然而,$ .browser已被弃用,并使用UA嗅探。这段代码应该做的伎俩:https://gist.github.com/527683(见Javascript IE detection, why not use simple conditional comments?)。

编辑:此错误在IE 10还坚持要点摘录我联系过没有检测到IE 10,但有评论有没有解决方法。

+0

好去处,通常jQuery的文档说这是贬值,但在这种情况下它不会。 +1 –

0

不要创建一个动态的来源,许多人认为,所有你需要做的就是结合像这样的负载事件之后应用源...

$("img").load(function() {alert("loaded!"}).attr("src", imgSource);