2011-08-30 154 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