Firefox/Chrome/Opera はあるバージョンからこの機能をサポートしていますが、IE シリーズは IE9 でもまだサポートしていないため、プレースホルダー機能をサポートしていないこれらのブラウザと互換性を持たせるには JavaScript を使用する必要があります。
一般的な方法
現在一般的に使用されている方法は、次のように、form 要素の onfocus/onblur イベントを通じて値を変更することです。
<script> 🎜>var el = document.getElementById("text1"); <br>if (el.value == "") <br>el.value = "プロンプトメッセージ"; <br><br>el.onfocus = function () { <br>if (this.value == "プロンプト メッセージ") <br>this.value = "" <br>}; <br>el.onblur = function() { <br>if (this .value == " ") <br>this.value = "プロンプトメッセージ"; <br></script>
JQuery のさまざまなウォーターマーク プラグイン (http:/ /archive.plugins.jquery .com/plugin-tags/watermark) はほとんどがこのアプローチを採用しており、一部のスタイルやその他の操作の設定も含まれる場合があります。
このメソッドはフォーム要素を直接操作するため、便利で高速でより実用的です。
しかし、欠点もあります。
オートコンプリート、検証など、一部の操作では、関数を実装するためにフォーム要素の値を監視する必要もあります。
その値はフォームが送信されるとクリアされます
もちろん、ここには記載されていない他の欠点もあるかもしれません。
より良いアプローチ
不要なトラブルを避けるために、form 要素の値の変更は避けてください。
まず、次のようなテキストボックスがある場合:
テキストボックスの値は変更できないので、span などの要素を追加して配置するしかありません。絶対配置によってテキスト ボックスの上に位置:相対コンテナを追加して、プロンプト情報がオフセットされないようにします。
プロンプト メッセージ
タオバオのログイン ページを誤って発見しても、追加の追加は必要ありません。パッケージング用のposition:relative コンテナーのレイヤーを追加してもオフセットは発生しないため、次のようにテキスト ボックスの前にプロンプト情報マークを配置するだけで済みます。
プロンプト メッセージ
この方法で生成されたマークアップはより簡潔です。
対応するスタイル
最終的にレンダリングされるマークアップが決定したので、次のように、より美しく見えるように対応するスタイルを定義する必要があります:
/* ラベル スタイルのメイン スタイル */ .w-label {
position : 絶対;
パディング: 0 0 0 6px;
フォントサイズ: .8em;
不透明度: 1; 🎜>/* Hide Marker*/
.w-hide {
visibility: hidden;
opacity: 0;
}
/* フォーム要素がフォーカスされたときのマーカーの色*/
.w -active {
color: #ddd;
}
すると、HTML は次のようになります:
コードをコピーします
コードをコピー
コードは次のとおりです:
/* イベント バインディング*/
var addEvent = document.addEventListener ?
function(element, type, fn) {
element.addEventListener(type, fn, false); >} :
function(element, type, fn) {
element.attachEvent("on" type, fn);
},
/* イベントのバインド解除*/
RemoveEvent = document .removeEventListener ?
function(element, type, fn) {
element.removeEventListener(type, fn, false);
} :
function(element, type, fn) {
element .detachEvent("on" type, fn);
},
/* テキスト ボックスのウォーターマーク/プレースホルダー*/
ウォーターマーク = function(element, text) {
if ( !(このウォーターマークのインスタンス) ))
return new Watermark(element, text);
var place = document.createElement("span");//プロンプト情報マーク
element.parentNode.insertBefore(place, element);//フォーム要素の前の位置に挿入します。
place.className = "w-label";
place.innerHTML = text;
place.style.height = place.style.lineHeight = element .offsetHeight "px ";// 高さと行の高さを中央に設定します
element.place = this;
function HideIfHasValue() {
if (element.value && place.className.indexOf("w- hide") = = -1)
place.className = " w-hide";
}
function onFocus() {
hideIfHasValue()
if (!element.value && place .className.indexOf ("w-active") == -1)
place.className = " w-active";
}
function onBlur() {
if (!element.value ) {
place.className = place.className.replace(" w-active", "");
place.className = place.className.replace(" w-hide", ""); >}
関数 onClick() {
hideIfHasValue();
try {
element.focus && element.focus();
} catch (ex) {}
}
// 各イベントを登録します
hideIfHasValue();
addEvent(element, "blur", onBlur); keyup", hideIfHasValue);
addEvent(place, "click", onClick);
// ウォーターマークをキャンセル
this.unload = function() {
removeEvent(element, " focus", onFocus );
removeEvent(element, "blur", onBlur);
removeEvent(element, "click", onClick); .removeChild(place);
element.place = null;
};
上記のコードは、フォーム要素のフォーカス/ブラー/キーアップをそれぞれ渡します。プロンプト情報マークの表示、非表示、およびスタイルを制御するために使用されます。さらに、プロンプト情報マークのクリック イベントは、プロンプト情報マークを非表示にしてフォーム要素にフォーカスを取得するために使用されます。
最後に、ウォーターマークをキャンセルするためのアンロード メソッドが提供されます。
具体的な使用法
上記の js と css を使用して、ウォーターマーク機能を直接実装できます。以下は、ウォーターマークの適用とキャンセルを示しています。
コードをコピーします
コードは次のとおりです。