2011-12-09 69 views
3

通常,這會努力消除未來破碎的形象..如何使用jQuery

$("img").error(function(){$(this).hide();}); 

但它把現場上

$("img").live("error",function(){$(this).hide();}); 

問題時不工作是,對於那些圖像這是阿賈克斯生成的,我不能隱藏破碎的圖像。

回答

1

爲您添加圖像到DOM您可以添加事件處理程序:

$.get(urlHere, function(htmlData) { 
    var output = $(htmlData).find('img').error(function() {$(this).hide();}).end(); 
    $(<selector>).html(output); 
}); 

這裏是一個演示:http://jsfiddle.net/3nXcS/2/

更新

當你console.log()e.bubbles變量它返回false。所以你不能使用需要冒泡的綁定方法(.delegate(),.live())。

+0

這隻會輸出'img'元素。 'htmlData'中的任何其他元素都將丟失。改爲使用它:'var output = $(htmlData); output.filter('img')。error(function(){$(this).hide();}); $().html(輸出);'。無論如何,我認爲這正是OP想要避免的。 –

+0

@JosephSilber良好的捕獲,我添加了'.end()'到jQuery鏈的末尾來返回父選擇器。這種方法的好處是它只將事件綁定到必要的元素上,不需要冒泡,這是性能優勢。 – Jasper

+0

好吧,無論您是否附加了事件處理程序,都會發生事件冒泡......事實上,我認爲在這種特殊情況下,「live」對於性能會更好,因爲您只綁定1個元素上的事件處理程序(「 document')。 –

0

$("img").live方法應該工作,如果不是你可以嘗試livequeryLivequery

嘗試,

$("img").livequery('error', function(){$(this).hide();}) 
+0

它仍然沒有工作..我試圖把一個警報jsut知道它是否觸發,但沒有警報發生.. – lidongghon