找不到src源图像时如何静默隐藏“找不到图像”图标

IT技术 javascript jquery html css image
2021-02-08 00:28:11

您知道如何在未找到图像文件时从呈现的 HTML 页面中隐藏经典的“未找到图像”图标吗?

任何使用 JavaScript/jQuery/CSS 的工作方法?

6个回答
<img onerror='this.style.display = "none"'>
太棒了,正是我需要的。简单明了,它适合模板!
2021-03-17 00:28:11
虽然已经很老了,但这很棒!有没有办法隐藏我现在隐藏的图像周围的 <a> 标签?
2021-03-21 00:28:11
不幸的是,我无法使用此解决方案,因为 html 内容是通过 Json 从第三方网站下载的,我无法对其进行编辑。不管怎么说,还是要谢谢你。
2021-04-10 00:28:11

您可以使用onerrorJavaScript 中事件在图像加载失败时采取行动:

var img = document.getElementById("myImg");
img.onerror = function () { 
    this.style.display = "none";
}

在 jQuery 中(因为你问过):

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

或者对于所有图像:

$("img").error(function () { 
    $(this).hide();
    // or $(this).css({visibility:"hidden"}); 
});

如果隐藏图像可能会改变布局,您应该使用visibility: hidden代替.hide()网络上的许多站点都使用默认的“无图像”图像,src当指定的图像位置不可用时,将属性指向该图像。

andy - 适用于所有图像的“全局”解决方案是什么?我认为如果它们都在同一个 div 中会很容易 - 只是想知道文档中的所有图像......
2021-03-16 00:28:11
@jim:如果您使用 jQuery,则可以将事件应用于所有图像。只需使用标签选择器,例如$("img").error(function () { /*...*/ });
2021-03-18 00:28:11
visibility会更好,因为display可以破坏布局。
2021-03-18 00:28:11
@Andy E:听起来不错,+1。下一个有趣的问题是,“ error” 是否可以与live()or绑定delegate()
2021-03-24 00:28:11
@jAndy:我很确定是这样,但你的评论让我再次检查。一个快速的谷歌返回了这个w3schools 页面(对不起,大卫,如果你正在阅读这篇文章)表明跨浏览器支持。
2021-04-06 00:28:11

我稍微修改了 Gary Willoughby 建议的解决方案,因为它简要地显示了损坏的图像图标。我的解决方案:

    <img src="..." style="display: none" onload="this.style.display=''">

在我的解决方案中,图像最初是隐藏的,只有在成功加载时才会显示。它有一个缺点:用户不会看到半载的图像。如果用户禁用了 JS 那么他们将永远看不到任何图像

...如果javascript被禁用,用户将看不到任何东西!
2021-03-25 00:28:11
@yckart 好吧,如果用户禁用了 javascript,那么大多数有用的 Web 应用程序都将无法运行...
2021-04-08 00:28:11
<img src="..." onerror="this.style.display = 'none'"/> 对于半加载和非 js 浏览器的情况可能会更好?
2021-04-13 00:28:11

要隐藏每个图像错误,只需在页面底部(就在结束 body 标记之前)添加此 JavaScript:

(function() {
    var allimgs = document.images;
    for (var i = 0; i < allimgs.length; i++) {
        allimgs[i].onerror = function() {
            this.style.visibility = "hidden"; // Other elements aren't affected. 
        }
    }
})();
这是我的首选方法,因为它几乎可以确保在图像出错之前绑定 onerror 事件,并且您不必为每个图像标记添加 onerror 属性。确保将此代码放在所有图像标签之后,但在 <body> 中的任何其他 javascript 之前,否则阻止外部 JS 加载可能会导致在图像错误后执行。
2021-03-19 00:28:11
这个对我有用,加上加拉太人的建议,需要在任何可能延迟它之前执行这个 JS。
2021-03-25 00:28:11
这回答了最初的问题,但这是一个单向过程。要使随后加载的图像再次可见,还需要添加一个 onload 事件。allimgs[i].onload = function() { this.style.visibility = "visible"; };
2021-03-26 00:28:11

回答可能有点晚了,但这是我的尝试。当我遇到同样的问题时,我通过使用图像大小的 div 并将背景图像设置为此 div 来修复它。如果未找到图像,则 div 将呈现为透明,因此无需 java 脚本代码即可静默完成所有操作。