Я пытаюсь дублировать эффект, используемый в поле поиска Firefox, где, если поле поиска не имеет фокуса (пользователь не щелкнул внутри него), серым текстом просто написано Google. Затем, когда пользователь щелкает в поле, текст удаляется, и они могут ввести свой поисковый запрос.
Я хочу использовать это, чтобы предоставить пример данных поля для веб-формы.
Синтаксис JQuery был бы предпочтительнее простого javascript, но простой JS тоже подойдет.
Спасибо, SO Hive Mind!



![Безумие обратных вызовов в javascript [JS]](https://i.imgur.com/WsjO6zJb.png)


$(selector).text('Google');
$(selector).click(function(){
$(this).text('');
});
Вероятно, есть более элегантный способ сделать это, но при этом предполагается, что в вашем поле нет текста при загрузке страницы. Если это так, вы можете удалить первую строку.
Я не тестировал это, но должно работать.
<style type='text/css'>
input #ghost { color: #CCC; }
input #normal { color: #OOO; }
</style>
<script type='text/javascript'>
function addTextHint(elem, hintText)
{
if (elem.value == '')
{
elem.value = hintText;
elem.style.className = 'ghost';
}
elem.onfocus = function ()
{
if (elem.value == hintText)
{
elem.value = '';
elem.className = 'normal';
}
}
elem.onblur = function ()
{
if (elem.value == '')
{
elem.value = hintText;
elem.className = 'ghost';
}
}
}
addTextHint(document.getElementById('foobar'),'Google');
</script>
Просто придумал это для вас. Я уверен, что jQuery сделает его меньше, но я им не пользуюсь.
только я бы заменил переключение цвета переключением классов css.
С этим есть несколько подводных камней. Если вы отправите эту форму без изменения значений, в качестве текста будет отправлено "Google". Возможно, это не то, что вам нужно. Даже если вы отфильтруете значение на стороне сервера, браузер клиента сохранит значение и будет использовать его в качестве значения по умолчанию при будущих просмотрах страниц.
Другой способ - использовать некоторый CSS, создать изображение с нужным фоновым текстом и установить его в качестве фонового изображения текстового поля, а затем, когда текстовое поле окажется в фокусе, вы можете переключить стили, чтобы удалить это фоновое изображение.
Зачем катить собственное? Используйте этот плагин.
Реализация JQuery
<input type = "text" id = "textField" value = "Google" class = "RegularText GhostText" />
<style>
.GhostText{color:#DDD}
.RegularText{color:#CCC}
</style>
<script type = "text/javascript" language = "javascript">
$("#textField").blur(function(e){
if ($.trim(e.target.value) == "") {
e.target.value = e.target.defaultValue;
e.target.toggleClass("GhostText");
}
});
$("#textField").focus(function(e){
if ($.trim(e.target.value) == e.target.defaultValue) {
e.target.value = "";
e.target.toggleClass("GhostText");
}
});
</script>
Этот метод настолько широко используется, что теперь он явно поддерживается в спецификации HTML через атрибут placeholder во входном теге:
Атрибут заполнителя HTML
Он уже поддерживается в большинстве браузеров., а для более старых есть плагин jquery, обеспечивающий реализацию прокладки, которую можно найти здесь.
Чтобы стилизовать замещающий текст, обратитесь к этому (включая живые примеры):
Стили HTML5-заполнителя с помощью CSS
Что-то не так с этим: 1. Не повторяется, если вы оставите поле пустым. 2. Не поддерживает вкладки. 3. Отсутствует фантомный текст. 4. Очищает пользовательский текст при перефокусировке.