Default Text Field Values That Disappear on Focus

You will have noticed this effect out on your travels on the internet - a text input field has some default text in it (often in a slightly dimmed colour), and when you click on the text box, default text disappears and then reappears when you click away from the box. It happens on the search box to the right here too.

I needed this same effect at work today so a quick Google came up with this great blog post - a lovely example of the exact effect I was looking for in both raw javascript and a version using the jQuery library.

The script searches the page that it’s inserted on for all form input fields that have a class of ‘default-value’ applied. Each form input field must also have a unique ID.

When the page loads the script changes the color of the text in the text fields it has found to the value of ‘inactive_color’. If the user clicks on the input field, the default text is blanked, and the colour changed to ‘active_color’. If the user clicks away from the input field, i.e. the input field loses focus, the value of the text field will revert back to the original text, and the colour will change back to ‘inactive_color’, unless the user has entered some other text.

Here’s a copy of the jQuery version for my own personal notes, never know when that could be useful:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
/*
 * Written by Rob Schmitt, The Web Developer's Blog
 * http://webdeveloper.beforeseven.com/
 */
 
var active_color = '#000'; // Colour of user provided text
var inactive_color = '#999'; // Colour of default text
 
$(document).ready(function() {
  $("input.default-value").css("color", inactive_color);
  var default_values = new Array();
  $("input.default-value").focus(function() {
    if (!default_values[this.id]) {
      default_values[this.id] = this.value;
    }
    if (this.value == default_values[this.id]) {
      this.value = '';
      this.style.color = active_color;
    }
    $(this).blur(function() {
      if (this.value == '') {
        this.style.color = inactive_color;
        this.value = default_values[this.id];
      }
    });
  });
});

However, we don’t use jQuery at work, our entire site is based around Prototype and script.aculo.us, so I did a bit of butchering and here’s the code adapted to use Prototype:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
/*
 * Written by Darren Oakley
 * http://hocuspokus.net
 */
 
var active_color = '#000'; // Colour of user provided text
var inactive_color = '#999'; // Colour of default text
 
Event.observe( window, 'load', function () {
    var default_values = new Array();
    $$("input.default-value").each( function (s) {
        $(s).setStyle({ color: inactive_color });
        $(s).observe( 'focus', function () {
            if (!default_values[s.id]) {
                default_values[s.id] = s.value;
            }
            if (s.value == default_values[s.id]) {
                s.value = '';
                $(s).setStyle({ color: active_color });
            }
            $(s).observe( 'blur', function () {
                if (s.value == '') {
                    $(s).setStyle({ color: inactive_color });
                    s.value = default_values[s.id];
                }
            });
        });
    });
});

Now all you need to do is give your input text fields a unique id, and the class of ‘default-value’, then the script will take care of the rest.

4 Responses to “Default Text Field Values That Disappear on Focus”


  1. 1 cd

    if u want simple input text who will disapear when u focus ypur cursor on it just use this

    <input onfocus="this.value=''" type="text" value="some text" />

    or this

    <input onfocus="this.select()" type="text" value="some text" />
  2. 2 Andy

    This could be made simpler by assigning a custom property to the object in the DOM. I’ve called it “defaultValue”. Does not address the colour change, but again, it could be assigned as a custom property if necessary.

    $('input[type="text"]').focus(function() {
      if (!this.defaultValue) this.defaultValue = value;
    });
    $('input[type="text"]').blur(function() {
      if (this.value == '') this.value = (this.defaultValue ? this.defaultValue : '');
    });
  3. 3 Andy

    Even better, defaultValue is already part of the DOM. I always forget that… So here is a more slimline jQuery powered version

    $('input[type="text"]').focus(function() {
      this.value = '';
    });
    $('input[type="text"]').blur(function() {
      if (this.value == '') this.value = (this.defaultValue ? this.defaultValue : '');
    });
  4. 4 Daz

    This could be made simpler by assigning a custom property to the object in the DOM. I’ve called it “defaultValue”. Does not address the colour change, but again, it could be assigned as a custom property if necessary.

    Ta! That’s just a little more concise, great example. :)

Leave a Reply

Quote selected text