O'Reilly

Use Custom Missing Image Graphics Using MooTools

By on  

Missing images on your website can make you or your business look completely amateur. Unfortunately sometimes an image gets deleted or corrupted without your knowledge. You'd agree with me that IE's default "red x" icon looks awful, so why not use your own missing image graphic?

The MooTools JavaScript

window.addEvent('domready',function() {
	/* version 1 */
	$$('img.missing1').addEvent('error',function() {
		this.set({
			src: 'http://davidwalsh.name/demo/missing-image.jpg',
			alt: 'Sorry!  This image is not available!',
			styles: {
				width: 110,
				height:40
			}
		});
	});
	/* version 2 */
	$$('img.missing2').addEvent('error',function() {
		this.set({
			src: 'http://davidwalsh.name/demo/missing-image-2.jpg',
			alt: 'Sorry!  This image is not available!',
			styles: {
				width: 30,
				height:28
			}
		});
	});
});

Note that I've provided two examples. If you want to get really specific, you can create multiple images and account for different sizes when possible.

A great website accounts for all of the details. This is yet another way of accounting for the finest of details. A website is NEVER complete!

O'Reilly Velocity Conference
Save 20% with discount code AFF20

Recent Features

  • CSS 3D Folding Animation

    Google Plus provides loads of inspiration for front-end developers, especially when it comes to the CSS and JavaScript wonders they create. Last year I duplicated their incredible PhotoStack effect with both MooTools and pure CSS; this time I'm going to duplicate...

  • fetch API

    One of the worst kept secrets about AJAX on the web is that the underlying API for it, XMLHttpRequest, wasn't really made for what we've been using it for.  We've done well to create elegant APIs around XHR but we know we can do better.  Our effort to...

Incredible Demos

  • CSS Fixed Position Background Image

    Backgrounds have become an integral part of creating a web 2.0-esque website since gradients have become all the rage. If you think gradient backgrounds are too cliche, maybe a fixed position background would work for you? It does provide a neat inherent effect by...

  • jQuery Wookmark

    The first thing that hits you when you visit Pinterest is "Whoa, the columns are the same width and the photos are cut to fit just the way they should."  Basic web users probably think nothing of it but as a developer, I can appreciate the...

Discussion

  1. This is very smart. great job

  2. not bad…

  3. Nice idea. There should be a server side method of doing this – something with .htaccess I guess. Let me go search for that.

  4. Is there a way to track missing images for div that use images as their background?

  5. @Jesus DeLaTorre: I suppose you could use MooTools’ Assets plugin to load it in initially to catch the error, but not from a stylesheet.

  6. chris

    shouldn’t you rather have it email you and tell you that the image is missing?

  7. @David Thanks for the heads up. I’ll see about integrating the too.

    @Chris I think David’s solution is valid. You can still grep the logs and see if the missing image file is ever requested and then all you have to do check the referer. At the bare minimum, you have to at least provide a user friendly image and then you can add something like email or an ajax call to log the error.

  8. I dont quite understand how this works. Are you supposed to id the broken images by giving them a special hook (class name, alt tag, etc.)? If you can do that, why not fix the image?

  9. My bad, I didnt notice the error event

  10. This could be done server side using PHP’s “file_exists” function. Still I like your creativity with this script.

  11. @Doug Waltman: There are other types of image errors, like a corrupt image which file_exists() wouldn’t prevent.

  12. Very useful tip!!

  13. very useful thing!
    thx for the tip.

  14. BeN

    @Doug Waltman: Using server side script (file_exists, file_get_contents) is just one method to check broken images and is very usefull, i am working on a flickr app … Some firewalls and some intranets doesnt allow connection to flickr (or youtube, and other services). In that cases the only way to fix that problem is using js on the client side.

  15. Hello David and sorry for my English.

    Does it work with mootools-release-1.11 ?

    Thanks for your answer.

Wrap your code in <pre class="{language}"></pre> tags, link to a GitHub gist, JSFiddle fiddle, or CodePen pen to embed!

Recently on David Walsh Blog

  • Prevent Chrome from Translating a Page

    A while back I shared my favorite Google Chrome extension:  Google Art Project.  I've enjoyed seeing beautiful art when I open a new tab -- it's brought genuine happiness to my day, however small that happiness may be.  About a week ago, however, the art presented had...

  • Create Any Type Of Website With These Multi-Purpose Themes

    We have selected what we believe are the very best multipurpose WordPress themes on the market today. Our list contains a number of best sellers, several newcomers that are proving to be highly popular, and a few themes that are ideal for creating the types of...

  • An Introduction to Static Site Generators

    Static site generators seem to have been becoming more and more popular recently, but they’re not one of those ephemeral novelty things that grow in popularity as quickly as they fall into oblivion shortly after. For over a decade, many different projects — 394 of...

  • Automated Tests for Visual Responsive Layouts

    Today it's all about testing. In 2015, many developers knows about TDD and I personally think that testing is one of the key for quality products. But what about testing in a Front-end environment? How do you guys write your tests for a responsive page or...

  • Getting Dicey With Flexbox

    What if you could build complex CSS layouts in minutes? Flexbox is a new CSS layout spec that makes it easy to construct dynamic layouts. With flexbox, vertical centering, same-height columns, reordering, and direction agnosticism are a piece of cake. There's a popular myth floating around that...