Hide or change all broken or invalid images
If you would like to check all images (<img /> tag) on your site and hide them in case, their src attribute points to an invalid location, then there’s a great solution for this on Stack Overflow. I have added a very little fix to that code, to have images replaced with some default one, instead of being hidden.
For a single image you can do something as easy as (from mentioned SO answer):
<img src="image.png" onError="this.onerror = '';this.style.visibility='hidden'" />
You can use jQuery to browse all images in your DOM document:
$("img").each(function()
{
var image = $(this);
if(image.context.naturalWidth == 0 || image.readyState == 'uninitialized')
{
$(image).unbind("error").hide();
}
});
Replace:
$(image).unbind("error").hide();
with:
$(image).src = '/images/general-no-preview.jpg';
$(image).unbind("error");
to have invalid images replaced with some default one, instead of being hidden.
There is a pure Javascript / no-jQuery alternative to above code:
<img src="image.png" onerror="onImageError(this);" />
function onImageError(image) {
image.onerror = "";
image.src = "/images/general-no-preview.jpg";
return true;
}
Which can be also reduced to a oneliner:
<img src="image.png" onError="this.onerror=null;this.src='/images/general-no-preview.jpg';" />;
All above examples bases on error event, which is fired, when browser encounters an image, that does not exist. This event is supported by all major browsers.