HTML5
В HTML5 добавлен удобный атрибут для тега <input>
под названием placeholder
, который обеспечивает встроенную поддержку этой функции.
jsFiddle
<input type="text" placeholder="Search..." />
Служба поддержки
Все последние браузеры поддерживают это, однако IE9 и более ранние версии не поддерживают.
<label>
Обратите внимание, что атрибут placeholder не является заменой для тега <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;
}
}
person
Daniel Imms
schedule
28.03.2013