次のコードを使用して、ユーザーが入力ボックスを選択すると値が消えるようにしますが、ユーザーがクリックするとデフォルト値が再挿入されます。
$(function() {
var defaultText = '';
$('input[id=input]').focus(function() {
defaultText = $(this).val();
$(this).val('');
});
$('input[id=input]').blur(function() {
$(this).val(defaultText);
});
});
しかし、それはまさに私が望む方法ではありません。ユーザーがテキストを挿入する場合、デフォルトのテキストにユーザーが入力した内容を上書きさせたくない。また、jQueryはかなり新しいので、どんな助けでもいただければ幸いです。
focus()
メソッドでは、クリアする前にdefaultText
と等しいかどうかを確認する必要があります。blur()
関数では、val()
は、defaultText
を設定する前は空です。複数の入力を処理する場合は、IDではなくクラスを使用することをお勧めします。そのため、クラスが「入力」の場合、セレクターはinput.input
になります。 IDであっても、input#input
として参照します。
// run when DOM is ready()
$(document).ready(function() {
$('input.input').on('focus', function() {
// On first focus, check to see if we have the default text saved
// If not, save current value to data()
if (!$(this).data('defaultText')) $(this).data('defaultText', $(this).val());
// check to see if the input currently equals the default before clearing it
if ($(this).val()==$(this).data('defaultText')) $(this).val('');
});
$('input.input').on('blur', function() {
// on blur, if there is no value, set the defaultText
if ($(this).val()=='') $(this).val($(this).data('defaultText'));
});
});
this jsFiddle で実行中に設定します。
ぼかしハンドラで、ユーザーが何も書いていないかどうかを確認します。その場合は、次のようにデフォルトのテキストを元に戻します。
$('input[id=input]').blur(function() {
if ($(this).val() == '') {
$(this).val(defaultText);
}
});
古い質問+人々が私の問題を修正するのではなく別の解決策を提供する場合は嫌いですが、それでもなお、jQueryプラグインでHTMLプレースホルダー属性を使用すると問題が解決します。
HTML data-属性を使用して、そこから書き込み/読み取りを行うこともできます。