HTML5仕様に一致するようにplaceholder
の動作を変更する無料で利用可能なjQueryプラグインはありますか?
フォーカス前
On Focus Good(Safari)
On Focus Bad(Chrome、Firefox)
あなたはあなたのブラウザがすることをすることができます この簡単なフィドルで 。
ユーザーエージェントは、要素の値が空の文字列またはコントロールである場合、改行を取り除いた後、このヒントをユーザーに提示する必要があります。フォーカスされていない(フォーカスされていない空白のコントロール内に表示し、それ以外の場合は非表示にする).
「/ or」は現在のドラフトでは新しいため、ChromeおよびFirefoxはまだそれをサポートしていません。 WebKitバグ#73629 を参照してください Chromiumバグ#103025 。
Stefano J. Attardi は、まさにそれを実行するNice jQueryプラグインを作成しました。
ロバートよりも安定しており、フィールドに焦点を合わせると、明るい灰色にフェードします。
placeholder
を手動で作成するのではなく、span
属性を読み取るようにプラグインを変更しました。
このフィドル には完全なコードがあります:
<input type="text" placeholder="Hello, world!">
// Original code by Stefano J. Attardi, MIT license
(function($) {
function toggleLabel() {
var input = $(this);
if (!input.parent().hasClass('placeholder')) {
var label = $('<label>').addClass('placeholder');
input.wrap(label);
var span = $('<span>');
span.text(input.attr('placeholder'))
input.removeAttr('placeholder');
span.insertBefore(input);
}
setTimeout(function() {
var def = input.attr('title');
if (!input.val() || (input.val() == def)) {
input.prev('span').css('visibility', '');
if (def) {
var dummy = $('<label></label>').text(def).css('visibility','hidden').appendTo('body');
input.prev('span').css('margin-left', dummy.width() + 3 + 'px');
dummy.remove();
}
} else {
input.prev('span').css('visibility', 'hidden');
}
}, 0);
};
function resetField() {
var def = $(this).attr('title');
if (!$(this).val() || ($(this).val() == def)) {
$(this).val(def);
$(this).prev('span').css('visibility', '');
}
};
var fields = $('input, textarea');
fields.live('mouseup', toggleLabel); // needed for IE reset icon [X]
fields.live('keydown', toggleLabel);
fields.live('paste', toggleLabel);
fields.live('focusin', function() {
$(this).prev('span').css('color', '#ccc');
});
fields.live('focusout', function() {
$(this).prev('span').css('color', '#999');
});
$(function() {
$('input[placeholder], textarea[placeholder]').each(
function() { toggleLabel.call(this); }
);
});
})(jQuery);
.placeholder {
background: white;
float: left;
clear: both;
}
.placeholder span {
position: absolute;
padding: 5px;
margin-left: 3px;
color: #999;
}
.placeholder input, .placeholder textarea {
position: relative;
margin: 0;
border-width: 1px;
padding: 6px;
background: transparent;
font: inherit;
}
/* Hack to remove Safari's extra padding. Remove if you don't care about pixel-perfection. */
@media screen and (-webkit-min-device-pixel-ratio:0) {
.placeholder input, .placeholder textarea { padding: 4px; }
}
私は同じ問題の解決策をグーグルで調べることによってこの質問を見つけました。既存のプラグインは、古いブラウザーでは機能しないか、フォーカスのプレースホルダーを非表示にしているようです。
それで、私は既存のプラグインから最高のパーツを組み合わせようとしている間、私自身の解決策を採用することに決めました。
あなたはそれをチェックアウト ここ して、問題に直面した場合は問題をオープンすることができます。
このような単純なものはどうですか?フォーカスを当てて、プレースホルダーの属性値を保存し、属性を完全に削除します。ぼかしの場合は、属性を元に戻します。
$('input[type="text"]').focus( function(){
$(this).attr("data-placeholder",$(this).attr('placeholder')).removeAttr("placeholder");
});
$('input[type="text"]').blur( function(){
$(this).attr("placeholder",$(this).attr('data-placeholder'));
});
私は独自のcss3のみのソリューションを作成しました。それがすべてのニーズを満たしているかどうかを確認してください。
http://codepen.io/fabiandarga/pen/MayNWm
これは私の解決策です:
Pitfall:プレースホルダーが入力へのマウスイベントをブロックしています!この問題は、マウスが親(ラッパー)内にあるときにプレースホルダー要素を非表示にすることで回避されます。
<div class="wrapper">
<input txpe="text" autofocus="autofocus" required/>
<span class="placeholder">Hier text</span>
</div>
.placeholder {
display: none;
position: absolute;
left: 0px;
right: 0;
top: 0px;
color: #A1A1A1;
}
input:invalid + .placeholder {
display: block; /* show the placeholder as long as the "required" field is empty */
}
.wrapper:hover .placeholder {
display: none; /* required to guarantee the input is clickable */
}
.wrapper{
position: relative;
display: inline-block;
}
多分あなたはフロートラベルパターンで試すことができます:)
CSSのフロートラベル を参照