2011-08-30 153 views
2

此代码隐藏了损坏的图像,但不幸的是它在IE中不起作用。在IE中不起作用

(function() { 
     var img = document.getElementsByTagName('img'), 
     i = 0, len = img.length; 
     for(; i < len; i++) { 
      img[i].onerror = function() { 
       this.style.visibility= 'hidden'; 
      } 
     } 
}()); 

请告诉我什么是错误。

+2

是不是因为你没有指定'onerror'处理,直到_after_发生了'onerror'事件? – nnnnnn

+0

只需将其缩进四个空格(或突出显示并单击“{}”按钮)即可格式化代码。 –

+0

@nnnn很可能是原因。为什么不把它作为答案? –

回答

3

是因为你不分配onerror处理程序,除非发生了onerror事件之后?

在大多数情况下,我可能不会推荐联事件处理程序,但对于这个特殊的目的,你可以尝试:

<img src="..." onerror="this.style.visibility='hidden';"> 

(我知道这将是一个痛苦的是在每一个img标签,但我认为这将是更容易的工作)

+0

但在Firefox – levon

+0

作品是的,以及这将使它刚刚的事情,在浏览器中_X_工作很长的列表中的一个,但不是浏览器_Y _... – nnnnnn

+0

是的,但我有很多网站上的图片都来自我们的合作伙伴 – levon

0

你的代码是正确的 - 也适用于Internet Explorer。问题是你运行你的代码的地方(我们在这里没有看到它)。如果它在页面的最后,可能会发生一些图像已经加载并且事件根本不会发生。您可以使用nnnnnn建议的解决方案(内联脚本)轻松测试它。然而,要找到一个权利和解决方案(对于IE),而不是修改每一个img内联 - 你可以尝试对一些图像属性进行验证,如complete。问题是找到一个正确的地方来运行这样的测试。 onload似乎是正确的,但你会有类似的问题,如onerror - 定义图像加载之前的事件。最终你可以做一些肮脏的诡计 - 通过运行一些延迟(setTimeout)的循环 - 并从window.onload执行这样的代码。所以代码可能如下所示:

(function() { 
     var img = document.getElementsByTagName('img'), 
     i = 0, len = img.length; 
     for(; i < len; i++) { 
      if(!img[i].complete) { 
       this.style.visibility = 'hidden'; 
      } 
     } 
})(); 

只为IE运行此代码。在Chrome浏览器img[i].complete可以为破碎的图像链接。

+0

装非常感谢你 – levon