基本的に、すべての主要なブラウザでネイティブにサポートされているplaceholder
属性を記述しています。ただし、古いブラウザではサポートされていません。より広範なサポートを得るには、この属性のサポートをシムする必要があります。これを行う多くのオプションがオンラインにありますが、必要に応じて自分で行うこともできます。
基本的に、自分自身や他の人が標準のマークアップを使用できるようにする必要があります。
<input name="fname" placeholder="First Name">
jQueryを使用すると、属性を持つ要素のfocus
and blur
(またはfocusin
and )イベントに応答します。要素がフォーカスされていて、プレースホルダー値がある場合は、要素をクリアします。要素がぼやけていて空の場合は、プレースホルダー値を指定します。focusout
placeholder
これは少し冗長ですが、ロジックに従うのに役立つコメントを追加しました。
// Written and tested with jQuery 1.8.1
(function ( $ ) {
// Play nice with jshint.com
"use strict";
// Abort if browser already supports placeholder
if ( "placeholder" in document.createElement("input") ) {
return;
}
// Listen at the document level to work with late-arriving elements
$(document)
// Whenever blur or focus arrises from an element with a placeholder attr
.on("blur focus", "[placeholder]", function ( event ) {
// Determine the new value of that element
$(this).val(function ( i, sVal ) {
// First store a reference to it's placeholder value
var placeholder = $(this).attr("placeholder"), newVal = sVal;
// If the user is focusing, and the placehoder is already set
if ( event.type === "focusin" && sVal === placeholder ) {
// Empty the field
newVal = "";
}
// If the user is blurring, and the value is nothing but white space
if ( event.type === "focusout" && !sVal.replace(/\s+/g, "") ) {
// Set the placeholder
newVal = placeholder;
}
// Return our new value
return newVal;
});
})
// Finally, when the document has loaded and is ready
.ready(function () {
// Find non-autofocus placeholder elements and blur them
// This triggers the above logic, which may provide default values
$(":input[placeholder]:not([autofocus])").blur();
});
}(jQuery));
この特定のシムは、基本的な機能のみを提供します。他の人は、プレースホルダー値が使用されているときにフォントの色を変更したり、入力を開始するまでプレースホルダー値を表示したままにすることをサポートする場合があります(このアプローチでは、フォーカスがすぐに削除されます)。