在IE中不起作用

时间:2011-08-30 08:06:29

标签: javascript internet-explorer

此代码隐藏了损坏的图像,但不幸的是它在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 个答案:

答案 0 :(得分:3)

是不是因为在onerror事件发生之后才分配onerror处理程序?

对于大多数用途,我可能不会推荐内联事件处理程序,但出于特定目的,您可以尝试:

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

(我知道在每个img标签上加上它会很痛苦,但我认为它更有可能起作用。)

答案 1 :(得分:0)

您的代码是正确的 - 也适用于Internet Explorer。问题是你运行代码的地方(我们在这里看不到)。如果它位于页面的末尾,则可能会发生某些图像已加载且onerror事件根本不会发生。您可以使用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上可以为损坏的图片链接提供支持。