2013-02-24 45 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'); 
}