如何使用jQuery在IE中隐藏损坏的图像?
我尝试了从jQuery站点复制的这段代码,但在IE7/IE8中失败,但在其他浏览器中也能工作。这段代码有什么问题,它来自jQuery站点(http://api.jquery.com/error/). 我使用的是jQuery版本1.4.4如何使用jQuery在IE中隐藏损坏的图像?,jquery,image,error-handling,Jquery,Image,Error Handling,我尝试了从jQuery站点复制的这段代码,但在IE7/IE8中失败,但在其他浏览器中也能工作。这段代码有什么问题,它来自jQuery站点(http://api.jquery.com/error/). 我使用的是jQuery版本1.4.4 $(document).ready(function(){ $("img").error(function(){ $(this).hide(); }); }); 问题是,在执行$(document.ready)时,映像已经完
$(document).ready(function(){
$("img").error(function(){
$(this).hide();
});
});
问题是,在执行
$(document.ready)
时,映像已经完成加载,因此加载/错误事件将不再触发
我能想到的绕过此操作的唯一方法是重新加载图像,从而“强制”触发事件:
$(document).ready(function(){
$("img").each(function(index) {
$(this).error(function() {
$(this).hide();
});
$(this).attr("src", $(this).attr("src"));
});
});
它的性能应该不会太差,因为图像很可能是从缓存中获取的,而不是从服务器重新加载的
此处提供了实时测试用例(使用cool cats;):使用上述解决方案仍会导致“断开的图像图标”短暂出现,因为
错误()
和隐藏()之间存在延迟
我使用了允许在图像成功加载时回调的。首先,我将图像设置为可见性:hidden
。然后,当它成功加载时,我将其设置为可见:
$('div.target img').each(function(){
$(this).imagesLoaded(function(){
$(this).css('visibility','visible');
})
})
这会占用更多的资源,但会阻止“损坏的图像图标”显示。我不在整个网站上使用此图像,只在可能出现图像损坏的部分使用。在IE8中,我的替换图像仍然没有加载。下面的代码为我解决了这个问题。您可能需要处理超时延迟,以找出最有效的方法
setTimeout(function() {
$("img").each(function () {
$(this).error(function () {
$(this).attr("src", "../imageupload/image-failed.png");
});
$(this).attr("src", $(this).attr("src"));
});
}, 100);
在IE中,当在img元素上使用error()时,在设置图像的src之前,您应该绑定错误处理程序,否则它可能无法正确触发。@MauricioScheffer感谢您让我知道,很快就会检查它。@ShadowWizard抱歉,我的错,我误解了问题和您的答案,我的问题略有不同。@MauricioScheffer干杯,你为我节省了几分钟,哈哈。你用自己的问题发帖了吗?@ShadowWizard我已经在另一个问题中找到了,谢谢!