HTML構造を変更できないことを考えると、目的を達成するための1つの単純なJavaScriptの手段は次のとおりです。
function placeholding(el,greyed) {
if (!el) {
// if you don't specify a DOM node, it quits
return false;
}
else {
var input = el,
/* assumes the label element is the previous element sibling
(requires a fairly up-to-date/compliant browser */
label = el.previousElementSibling,
placeholder = label.textContent,
/* specifies the color string, or uses the default, for the
color of the place-holder */
greyed = greyed || '#999';
label.style.display = 'none';
input.value = placeholder;
input.style.color = greyed;
input.onfocus = function() {
/* if the current input-value is equal to the place-holder,
removes that value. */
if (this.value == placeholder) {
this.setAttribute('data-oldvalue', this.value);
this.value = '';
}
this.style.color = '#000';
};
input.onblur = function() {
// if no new value has been set, replaces the place-holder
if (this.value == '' || this.value.length === 0) {
this.value = this.getAttribute('data-oldvalue');
this.style.color = greyed;
}
};
}
}
placeholding(document.getElementById('email'));
前のlabel
要素を非表示にし、そのテキストを要素の「プレースホルダー」として使用し、input
フォーカスにそのプレースホルダーを非表示にしinput
、値が変更されていない場合は、プレースホルダーを再度表示します。
参照: