2013-02-24 24 views
2

蔭使用JS/jQuery來將圖像添加到我的網站是這樣的:jQuery的選擇上的錯誤動態添加圖像

var img = document.createElement("img"); 
img.width = imgWidth; 
img.file = fileList[i]; 
img.name = 'pic_' + i; 
img.classList.add("obj"); 

但有時會因爲不存在圖像的URL被打破。 在這種情況下,我想隱藏破碎的圖像。 問題是Iam無法捕捉到錯誤事件......如果有任何事件發生。 所有我看到的是破碎的形象與此代碼:

<img width="200" src="php/upload.php?action=showPic&amp;newsId=239"> 

我試了幾件事情:

$("img").error(function() { 
    alert("error"); 
}); 

或現場:

​​

但沒有事件越來越觸發: -/

任何想法? 謝謝!

+0

您是否嘗試在設置圖像源之前設置錯誤處理程序? – Alexander 2013-02-24 00:19:48

+0

[s]你在哪裏放了'$(「img」)。[?]'?嘗試'$(function(){/ *把它放在這裏* /}'。這將在文檔的'ready'狀態被觸發時執行。請參閱http://api.jquery.com/ready/ .. [/ s]編輯:啊等待,它動態添加,所以$(「img」)將不會選擇它,直到它存在。 – 2013-02-24 00:20:00

回答

3

,您可以使用錯誤()函數:

$('<img />', {width : imgWidth, 
       src : fileList[i], 
       name : 'pic_' + i, 
       'class': 'obj' 
}).error(function() { 
    $(this).hide(); 
}).appendTo('somewhere'); 

如果這是一個原生的JS元素,誤差函數將是要走的路:

var img = document.createElement("img"); 
    img.width = imgWidth; 
    img.name = 'pic_' + i; 
    img.classList.add("obj"); 
    img.onerror = function() { 
     this.style.display = 'none'; 
    } 
    img.src = fileList[i]; 

FIDDLE

不知道什麼img.file是,但我假設它的屬性你想設置src,也classList.add()一點兒也不擁有最好的瀏覽器支持,似乎想添加一個類奇怪的方式到一個新創建的元素,當img.className = 'obj'可用?

+0

我試過你的第一個解決方案與jQuery,但onerror事件似乎並沒有被解僱: - /也許我需要一些檢查圖像是否加載的其他方法... – Nico 2013-02-24 00:33:36

+0

如果您嘗試使用小提琴,應該隱藏第一個圖像,然後通過打開控制檯並查看其顯示設置爲無,並檢查該圖像是否可用jQuery並沒有一個onerror事件,這是一個本地JS事件,並且請注意onload和onerror應該在源設置之前設置等等。你怎麼知道這個錯誤事件不會被觸發,你如何使用這是在裏面的document.ready函數等? – adeneo 2013-02-24 00:38:18

+0

@ adeneo:謝謝,不知道.error()。小提琴看起來不錯。 – 2013-02-24 00:57:01

0

當你創建你的形象DOM節點如果您創建了jQuery的圖像,你應該附加一個onerror事件

... 
img.name = 'pic_' + i; 
img.onerror = hidebroken; 
... 

var hidebroken = function(){ 
    this.setAttribute('style', 'display:none !important'); 
}