Skip to the content...

Welcome to the David Walsh Blog. I'm a MooTools, Dojo, jQuery, CSS, and PHP Web Developer located in Madison, Wisconsin, United States. Please contact me if I can make your experience on my website better.

MooTools Form Field Default Plugin

13 Responses »

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.

Discussion

  1. michael
    September 15, 2008 @ 12:26 pm

    David, you’ve proved it once again.

    You’re the sh*t.

    Thanks for this post. Perfect timing.

    Michael

  2. September 16, 2008 @ 5:30 am

    where is the example?

    we want example :D

  3. martin lundgren
    September 18, 2008 @ 4:22 am

    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. September 18, 2008 @ 2:21 pm

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

  5. bradley
    September 20, 2008 @ 5:11 am

    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. November 26, 2008 @ 2:26 am

    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. December 21, 2008 @ 9:30 am

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

  8. October 14, 2009 @ 2:03 pm

    it works fine on every browser and validates.

  9. October 24, 2009 @ 3:02 pm

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

  10. October 24, 2009 @ 3:03 pm

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

  11. November 1, 2009 @ 11:49 am

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

Be Heard!

Share your thoughts with fellow developers of all skill levels! I want to hear from you!

Name*:
Email*:
Website:  
Wrap your code with <code> tags, f00!