Используйте атрибут placeholder. Конечно, это не работает в IE, и есть много решений, чтобы преодолеть отсутствие поддержки IE. Большинство из них не очень хороши, особенно те, которые изменяют значение входного элемента для выполнения текста заполнителя. Этот подход является ошибочным и имеет проблемы с доступностью.
Лучшим подходом является использование техники, которая не изменяет значения ввода. Он должен работать автоматически с формами, которые уже используют атрибут placeholder
без каких-либо дополнительных изменений в разметке. Техника, которую я использую, заключается в том, чтобы поместить метку за вход так, чтобы она показывалась через вход. Когда вход имеет фокус или значение, он получает фоновый цвет, чтобы скрыть метку-заполнителя.
Сначала я проверяю, поддерживает ли браузер placeholder
. Этот код говорит нам, поддерживается ли заполнитель:
if (!("placeholder" in document.createElement("input"))) {
// placeholder is not natively supported
}
Если placeholder
не поддерживается, я впрыснуть абсолютно позиционируется <label>
перед каждым <input>
, который имеет атрибут placeholder
и добавить noplaceholder
класс на вход, указывающий, что заполнитель не поддерживаемая на месте и что метка должна отображаться через вход. Я использую CSS для стилирования метки в соответствии с вводом и уменьшения непрозрачности ввода, чтобы ярлык показывался. Остальное - просто довольно простая обработка событий для добавления или удаления класса noplaceholder
в зависимости от того, имеет ли вход фокус и/или значение.
Вот мой код.Отбросьте следующие CSS и JavaScript на существующую страницу, использующую атрибуты-заполнители, и она должна работать. CSS может потребовать небольшой настройки, чтобы заставить его работать на вашей странице.
Демо:http://jsfiddle.net/yjfvm/2/
CSS-:
input[placeholder], .placeholder {
font-family: Sans-Serif;
border: 1px solid #b2b2b2;
border-radius: 3px;
padding: 2px 4px;
vertical-align: middle;
font-size: 1em;
line-height: 1em;
}
.placeholder + input[placeholder].noplaceholder {
filter: alpha(opacity=100);
background-color: #fff;
border-color: #b2b2b2;
}
.placeholder + input[placeholder] {
position: relative;
filter: alpha(opacity=50);
border-color: #666;
}
.placeholder, label.placeholder {
border-color: #fff;
position: absolute;
margin-top: 1px;
margin-left: 0;
top: auto;
}
JavaScript:
if (!("placeholder" in document.createElement("input"))) {
$(function() {
$("input[placeholder]").each(function() {
$("<label>")
.attr("for", this.id)
.addClass("placeholder")
.text(this.getAttribute("placeholder"))
.insertBefore(this);
$(this).addClass("noplaceholder");
}).on("keydown focus input", function() {
$(this).addClass("noplaceholder");
}).on("change blur", function() {
if (!this.value) {
$(this).removeClass("noplaceholder");
}
}).change();
$("form").on("reset", function() {
setTimeout(function() {
$("input[placeholder]:not(:focus)").change();
}, 0);
});
});
}
Что JQuery 'намек' делать? Это какой-то плагин? –
@westo: потому что в его реализации текст водяных знаков будет отображаться также в звездочках. –
это может быть интересно для вас: http://stackoverflow.com/a/2304369/306848 Кажется, аналогичная проблема –