これでうまくいくはずです:
入力とテキストエリアの両方で機能します-それぞれに設定したデフォルトはすべて保持されます。そのまま使用してください。
ここでフィドルを参照してください: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'));
});
編集:
ANevesによって提起され、HTML5プレースホルダー属性を利用する代替案を以下に示します。古いブラウザを気にしない場合は、プレースホルダー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'));
});
}