MooTools Form Field Default Plugin

By  on  

One nice, subtle enhancement you can add to your website is a default input value that disappears when the user clicks into the field and reappears if the user leaves the field empty. It's rather easy to do, but I decided to create a MooTools class for it anyway.

The XHTML

	<input type="text" class="defs" rel="Search here..." />
	<input type="text" class="defs" rel="Email address" />
	<input type="text" class="defs" rel="Like whoa!" />

Each field's default value will be whatever gets placed in the rel attribute.

The MooTools JavaScript Class

var dwDefaults = new Class({
	//implements
	Implements: [Options],

	//options
	options: {
		collection: $$('input[type=text]')
	},
	
	//initialization
	initialize: function(options) {
		//set options
		this.setOptions(options);
		this.defaults();
	},
	
	//a method that does whatever you want
	defaults: function() {
		this.options.collection.each(function(el) {
			el.set('value',el.get('rel'));
			el.addEvent('focus', function() { if(el.get('value') == el.get('rel')) { el.set('value',''); } });
			el.addEvent('blur', function() { if(el.get('value') == '') { el.set('value',el.get('rel')); } });
		});
	}
	
});

For every item in the collection, we add focus and blur event that controls whether the item's message should be removed or shown.

The MooTools JavaScript Usage

window.addEvent('domready', function() {
	var defs = new dwDefaults({
		collection: $$('input.defs')
	});
});

All you have to do is provide the collection!

There you have it! I would've done a jQuery plugin but it's already out there.

Recent Features

Incredible Demos

  • By
    jQuery Countdown Plugin

    You've probably been to sites like RapidShare and MegaUpload that allow you to download files but make you wait a specified number of seconds before giving you the download link. I've created a similar script but my script allows you to animate the CSS font-size...

  • By
    HTML5 Datalist

    One of the most used JavaScript widgets over the past decade has been the text box autocomplete widget.  Every JavaScript framework has their own autocomplete widget and many of them have become quite advanced.  Much like the placeholder attribute's introduction to markup, a frequently used...

Discussion

  1. Michael

    David, you’ve proved it once again.

    You’re the sh*t.

    Thanks for this post. Perfect timing.

    Michael

  2. where is the example?

    we want example :D

  3. Martin Lundgren

    Hi Dave,

    I just wan to point out that the input element does not have a rel attribute.

    I wrote a class for the exact same thing about two weeks ago. I used the value attribute to store the default value. Then ondomready I attached the default value to the element with the MooTools store() and retrieve() methods and applied the functionality.

    Thank you for a great site!

  4. I suggest using the alt-attribute. it works fine on every browser and validates.

  5. Bradley

    A nice enhancement to this script would be to also support password fields — since the value will show up as *, you have to create a new text input and hide the password input, and on-focus you swap them. I guess that could be a little bloaty if you aren’t going to use it for that, but it’s nice to have general-case solutions.

    I agree with the other comments about not using the rel attribute. In any case, decent little snippet.

  6. I was using a similar premise for a mootools validation script. For some reason I wanted it to validate but found the alt or rel attribute couldn’t be used. I decided to use the lang attribute and use underscores instead of spaces which are removed later. The lang attribute is common to most elements.

    e.g. To get a different or nice name for a select box

    [[select name=”role_id” id=”role_id” class=”val_required” lang=”Security_role”]]

    Not sure why I needed it to validate – obsessive compulsive I think : )

  7. Why aren’t you just using the defaultValue of the input text boxes?
    link text

  8. it works fine on every browser and validates.

  9. I suggest using the alt-attribute. it works fine on every browser and validates.

  10. I agree with the other comments about not using the rel attribute. In any case, decent little snippet.

  11. I just wan to point out that the input element does not have a rel attribute.

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