Это должно сработать:
Будет работать как для входных данных, так и для текстовых областей - независимо от того, какое значение по умолчанию вы установили для каждого, будет сохраняться. Использовать как есть.
См. Скрипку здесь: http://jsfiddle.net/leifparker/DvqYU/2/
(Это извлекает и сохраняет значение по умолчанию в атрибуте данных)
HTML
<textarea>I love bananas ..</textarea>
<textarea>How about you?</textarea>
<input type="text" value="Time for a bath ..">
<input type="text" value=".. because I smell">
JS
$('textarea, input[type=text]')
.each(function(){
$(this).data('defaultText', $(this).val());
})
.focus(function(){
if ($(this).val()==$(this).data('defaultText')) $(this).val('');
})
.blur(function(){
if ($(this).val()=='') $(this).val($(this).data('defaultText'));
});
EDIT:
Альтернатива, предложенная ANeves и использующая атрибут HTML5 placeholder , приведена ниже. Если вам не нужны старые браузеры, вы можете использовать заполнитель HTML самостоятельно (и он работает изначально, с результатами, аналогичными приведенным выше JS), или иным образом, как показано ниже, вам потребуется добавить запасной вариант JS.
Скрипка здесь: http://jsfiddle.net/leifparker/DvqYU/14/
HTML
<textarea placeholder="A few words about yourself"></textarea>
<textarea placeholder=".. and a few more about your mangy cat."></textarea>
<input type="text" placeholder="Your Awesome City">
<input type="email" placeholder="rickastin@youjustgot.com">
JS
function hasPlaceholderSupport() {
var input = document.createElement('input');
return ('placeholder' in input);
}
if (!hasPlaceholderSupport()){
$('textarea, input[type=text], input[type=email]')
.each(function(){
if ($(this).val()=='') $(this).val($(this).attr('placeholder'));
})
.focus(function(){
if ($(this).val()==$(this).attr('placeholder')) $(this).val('');
})
.blur(function(){
if ($(this).val()=='') $(this).val($(this).attr('placeholder'));
});
}