IE9的问题与jQuery load()事件没有触发

我正在尝试预加载几个图像,并希望我的页面保持不变,直到所有图像都加载完毕。 所以我正在做的是:

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

这适用于所有浏览器,除了(你猜对了)IE。 不知何故,Internet Explorer将下载所有图片(我可以看到它们被加载到开发工具中),但只会随机启动load -Event(每次刷新都会给我一个新的数字,通常它会计算到大约一半我尝试了不同版本的jQuery(我最初从1.6.1开始)并且在这个网站上也读过这样的问题,但还没有找到任何答案。

此外,它似乎不是一个缓存相关的问题,因为破坏它(或将随机查询字符串附加到图像源)并没有什么区别。

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

 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")); }); 

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

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

puchu的评论也很有趣。 但是,$ .browser已被弃用并使用UA嗅探。 这个片段应该可以解决这个问题: https : //gist.github.com/527683 (参见Javascript IE检测,为什么不使用简单的条件注释? )。

编辑:此错误在IE 10中仍然存在。此外,我链接的gist片段也没有检测到IE 10,但是有一些注释可用于解决方法。

+答案:不要在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")); } 

不要像许多人建议的那样创建动态源,所有你需要做的就是在绑定load事件后应用源代码,如下所示…

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