Cómo ocultar silenciosamente el icono "Imagen no encontrada" cuando no se encuentra la imagen de origen src
¿Sabes cómo ocultar el icono clásico "Imagen no encontrada" de una página HTML renderizada cuando no se encuentra un archivo de imagen?
¿Algún método de trabajo usando JavaScript/jQuery/CSS?
7 answers
Puede usar el evento onerror
en JavaScript para actuar cuando una imagen no se carga:
var img = document.getElementById("myImg");
img.onerror = function () {
this.style.display = "none";
}
En jQuery (desde que preguntaste):
$("#myImg").error(function () {
$(this).hide();
});
O para todas las imágenes:
$("img").error(function () {
$(this).hide();
// or $(this).css({visibility:"hidden"});
});
Debe usar visibility: hidden
en lugar de .hide()
si ocultar las imágenes puede cambiar el diseño. Muchos sitios en la web usan una imagen predeterminada "sin imagen" en su lugar, apuntando el atributo src
a esa imagen cuando la ubicación de la imagen especificada no está disponible.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2010-07-13 10:23:05
<img onerror='this.style.display = "none"'>
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2010-07-13 10:12:58
Haciendo una investigación rápida sobre la respuesta de Andy E, no es posible live()
vincular error
.
// won't work (chrome 5)
$('img').live('error', function(){
$(this).css('visibility', 'hidden');
});
Así que tienes que ir como
$('<img/>', {
src: 'http://www.notarget.com/fake.jpg',
error: function(e){
$(this).css('visibility', 'hidden');
}
}).appendTo(document.body);
Vinculando directamente el error event handler
al crear un nuevo elemento.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2010-07-13 10:20:33
Puede que sea un poco tarde para responder, pero aquí está mi intento. Cuando me enfrenté al mismo problema, lo arreglé usando un div del tamaño de la imagen y configurando background-image a este div. Si la imagen no se encuentra, el div se hace transparente, por lo que todo se hace silenciosamente sin código java-script.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2012-09-14 21:39:16
Para ocultar cada error de imagen, simplemente agregue este JavaScript en la parte inferior de su página (justo antes de la etiqueta de cuerpo de cierre):
(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.
}
}
})();
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2014-08-26 01:07:28
He modificado ligeramente la solución sugerida por Gary Willoughby, porque muestra brevemente la imagen rota. Mi solución:
<img src="..." style="display: none" onload="this.style.display=''">
En mi solución, la imagen se oculta inicialmente y solo se muestra cuando se carga correctamente. Tiene una desventaja: los usuarios no verán imágenes a medio cargar. Y si el usuario ha desactivado JS entonces nunca verá ninguna imagen
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2017-01-11 09:16:39
He encontrado un método ingenioso para hacer exactamente esto, mientras que sigue siendo funcional cuando se utiliza la directiva ng-src
en Angular.js y similares...
<img
ng-src="{{myCtrl.myImageUrlThatWillDynamicallyChange}}"
onerror="this.src='data:image/gif;base64,R0lGODlhAQABAIAAAP///wAAACH5BAEAAAAALAAAAAABAAEAAAICRAEAOw=='"
/>
Es básicamente un GIF transparente más corto (como se ve http://proger.i-forge.net/%D0%9A%D0%BE%D0%BC%D0%BF%D1%8C%D1%8E%D1%82%D0%B5%D1%80/[20121112]%20The%20smallest%20transparent%20pixel.html )
Por supuesto, este gif podría mantenerse dentro de alguna variable global para que no estropee las plantillas.
<script>
window.fallbackGif = "..."
</script>
Y use
<img
ng-src="{{myCtrl.myImageUrlThatWillDynamicallyChange}}"
onerror="this.src=fallbackGif"
/>
Etc.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2015-10-15 14:15:33