如何使用jQuery在IE中隐藏损坏的图像?

如何使用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)时,映像已经完

我尝试了从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").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我已经在另一个问题中找到了,谢谢!