何も入力しないままinputからフォーカスを外した時に、placeholderを表示させないようにしたかったので、placeholderをそれっぽく自作してみました。
サンプルコード
HTML
<div class="input-wrapper"> <input type="text" name="name" data-placeholder="(例) 天ノ川 沙夜" /> </div>
CSS
.input-wrapper {
position: relative;
width: 400px;
}
.input-wrapper input {
width: 100%;
box-sizing: border-box;
margin: 0;
border: #000000 2px solid;
border-radius: 4px;
padding: 15px 10px;
outline: none;
font-size: 14px;
}
.input-wrapper .placeholder {
position: absolute;
top: 0;
left: 0;
width: 100%;
box-sizing: border-box;
margin: 0;
padding: 15px 10px;
font-size: 14px;
}
JavaScript
$(function() {
$('.input-wrapper').find('[data-placeholder]').each(function() {
// placeholderの要素作成
$(this).after('<p class="placeholder"></p>');
$(this).next().text($(this).attr('data-placeholder'));
// アクセス時点で値が入力されている場合、placeholderを消しておく
if($(this).val() == '') {
$(this).next().show();
} else {
$(this).next().hide();
}
});
// placeholderがクリックされたとき
$('.placeholder').on('click', function(){
$(this).hide().prev(':text, textarea').focus();
});
// tabなどでフォーカスが当たったとき
$('.placeholder').prev(':text, textarea').on('focus', function(){
$(this).next().hide();
});
});
inputと同じサイズにした要素(.placeholder)をかぶせて、クリックされたときに要素を非表示+下のinputにフォーカスを当てるという処理を行っています。
自作placeholderのデモページ
コメントが承認されるまで時間がかかります。