HTML5
<input>
HTML5 为被调用的标签带来了一个方便的属性,该属性placeholder
支持对这个功能的原生支持。
jsFiddle
<input type="text" placeholder="Search..." />
支持
所有最新的浏览器都支持这个,但是 IE9 及以下不支持。
<label>
请注意,占位符属性不是每个输入都应具有的<label>
标签的替代品,请确保您包含标签,<input>
即使它对用户不可见。
<label for="search">Search</label>
<input id="search" placeholder="Search..." />
上述<label>
内容可以隐藏,因此仍可用于以下辅助技术:
label[for=search] {
position:absolute;
left:-9999px;
top:-9999px;
}
跨浏览器解决方案
这是一个潜在的跨浏览器解决方案,我已将代码从标签移到脚本标签中,然后使用该类placeholder
来指示何时淡化文本。
jsFiddle
HTML
<input name="firstName" type="text" maxlength="40" value="Enter your first name"
class="placeholder" id="my-input" />
CSS
input[type=text].placeholder {
color: #999;
}
JS
<script type="text/javascript">
var input = document.getElementById('my-input');
input.onfocus = function () {
if (this.value == this.defaultValue && this.className == 'placeholder') {
this.value = '';
}
this.className = '';
};
input.onblur = function() {
if (this.value == '') {
this.className = 'placeholder';
this.value = this.defaultValue;
}
};
</script>
全部应用input[type=text]
我们可以将上述解决方案扩展为适用于所有人input[type=text]
,方法是使用document.getElementsByTagName()
、循环它们并检查type
属性element.getAttribute()
。
jsFiddle
var input = document.getElementsByTagName('input');
for (var i = 0; i < input.length; i++) {
if (input[i].getAttribute('type') === 'text') {
input[i].onfocus = inputOnfocus;
input[i].onblur = inputOnblur;
}
}
function inputOnfocus () {
if (this.value == this.defaultValue && this.className == 'placeholder') {
this.value = '';
}
this.className = '';
}
function inputOnblur() {
if (this.value == '') {
this.className = 'placeholder';
this.value = this.defaultValue;
}
}