Я хочу, чтобы в поле поиска на моей веб-странице отображалось слово «Поиск» серым курсивом. Когда поле получает фокус, оно должно выглядеть как пустое текстовое поле. Если в нем уже есть текст, он должен отображать текст в обычном режиме (черный, не курсив). Это поможет мне избежать беспорядка, сняв этикетку.
Кстати, это поиск Аякс на странице, поэтому у него нет кнопки.
Привет Майкл. Вы бы хотели изменить принятый ответ на этой странице? Похоже, явный победитель отличается от принятого ответа.
Проблема с решением JavaScript заключается в том, что не у всех включен JavaScript. Заполнитель не исчезает, когда текстовое поле получает фокус при использовании плагина браузера, такого как NoScript (очень удобно для установки разработчиками). Вариант заполнителя - самое надежное решение.



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


Вы можете добавить и удалить специальный класс CSS и изменить входное значение onfocus / onblur с помощью JavaScript:
<input type = "text" class = "hint" value = "Search..."
onfocus = "if (this.className=='hint') { this.className = ''; this.value = ''; }"
onblur = "if (this.value == '') { this.className = 'hint'; this.value = 'Search...'; }">
Затем укажите класс намекать со стилем, который вы хотите в своем CSS, например:
input.hint {
color: grey;
}
Я опубликовал ответ, который делает то же самое, но более удобным и удобным в обслуживании способом: stackoverflow.com/questions/108207/…
Вы можете легко сделать поле с надписью «Поиск», а затем, когда фокус будет изменен на него, текст будет удален. Что-то вроде этого:
<input onfocus = "this.value=''" type = "text" value = "Search" />
Конечно, если вы это сделаете, собственный текст пользователя исчезнет, когда он щелкнет. Так что вы, вероятно, захотите использовать что-то более надежное:
<input name = "keyword_" type = "text" size = "25" style = "color:#999;" maxlength = "128" id = "keyword_"
onblur = "this.value = this.value || this.defaultValue; this.style.color = '#999';"
onfocus = "this.value=''; this.style.color = '#000';"
value = "Search Term">
Лучший способ - связать ваши события JavaScript с помощью какой-либо библиотеки JavaScript, такой как jQuery или YUI, и поместить свой код во внешний .js-файл.
Но если вам нужно быстрое и грязное решение, это ваше встроенное HTML-решение:
<input type = "text" id = "textbox" value = "Search"
onclick = "if (this.value=='Search'){this.value=''; this.style.color='#000'}"
onblur = "if (this.value==''){this.value='Search'; this.style.color='#555'}" />
Обновлено: Добавлены запрошенные раскраски.
Это нормально для поиска, но во многих случаях вы не хотите, чтобы водяные знаки отправлялись при любом событии отправки.
@ k.robinson Я добавил +1 к этому заявлению. На тот момент это был самый быстрый и компактный код. Это можно было бы решить более детально с помощью блока кода javascript.
Используйте фоновое изображение для визуализации текста:
input.foo { }
input.fooempty { background-image: url("blah.png"); }
Затем все, что вам нужно сделать, это определить value == 0 и применить правильный класс:
<input class = "foo fooempty" value = "" type = "text" name = "bar" />
А код jQuery JavaScript выглядит так:
jQuery(function($)
{
var target = $("input.foo");
target.bind("change", function()
{
if ( target.val().length > 1 )
{
target.addClass("fooempty");
}
else
{
target.removeClass("fooempty");
}
});
});
Вы хотите назначить для onfocus что-то вроде этого:
if (this.value == this.defaultValue)
this.value = ''
this.className = ''
и это в onblur:
if (this.value == '')
this.value = this.defaultValue
this.className = 'placeholder'
(Вы можете использовать что-то более умное, например, функцию фреймворка, для переключения имени класса, если хотите.)
С таким CSS:
input.placeholder{
color: gray;
font-style: italic;
}
Это известно как водяной знак текстового поля, и делается это с помощью JavaScript.
или если вы используете jQuery, гораздо лучший подход:
Вторая ссылка не работает. Это может быть похоже: digitalbush.com/projects/watermark-input-plugin
Нашел другой подход jQuery. этот проект размещен на @ code.google.com/p/jquery-watermark
Плагин digitalbrush сохранит «водяной знак» в базе данных. Он находится в стадии бета-тестирования и не обновлялся с 2007 года. Я рекомендую вместо этого использовать code.google.com/p/jquery-watermark, как предлагает @JP.
Я думаю, что автору вопроса следует вернуться и отметить комментарий @JP как лучший ответ.
Плагин водяных знаков jQuery довольно прост, потому что он не обрабатывает случай, когда ввод совпадает с предварительно заполненным значением. В этом случае он снова делает ваш вводимый текст серым!
@Jasie - Я не думаю, что многие люди будут вводить "введите текст" или что-то в этом роде, и если они это сделают, было бы легко поймать это, если бы вы действительно беспокоились об этом ...?
Я думаю, но тогда вам придется писать код поверх плагина, который должен помочь вам не писать код :)
@Jasie: в нем упоминается, что в readme - простое исправление - просто добавить кучу пробелов в конец текста водяного знака
Кроме того, плагин digitalbush не обрабатывает ввод пароля. Вместо пароля отображается ******
современный способ сделать это - использовать атрибут-заполнитель html5, javascript вообще не нужен.
Когда страница загружается в первый раз, в текстовом поле должен появиться поиск, если вы хотите, чтобы он был серого цвета.
Когда поле ввода получит фокус, выделите весь текст в поле поиска, чтобы пользователь мог просто начать вводить текст, что приведет к удалению выделенного текста в процессе. Это также будет хорошо работать, если пользователь захочет использовать поле поиска во второй раз, поскольку ему не придется вручную выделять предыдущий текст, чтобы удалить его.
<input type = "text" value = "Search" onfocus = "this.select();" />
Вот функциональный пример с кешем библиотеки Google Ajax и некоторой магией jQuery.
Это будет CSS:
<style type = "text/stylesheet" media = "screen">
.inputblank { color:gray; } /* Class to use for blank input */
</style>
Это будет код JavaScript:
<script language = "javascript"
type = "text/javascript"
src = "http://www.google.com/jsapi">
</script>
<script>
// Load jQuery
google.load("jquery", "1");
google.setOnLoadCallback(function() {
$("#search_form")
.submit(function() {
alert("Submitted. Value= " + $("input:first").val());
return false;
});
$("#keywords")
.focus(function() {
if ($(this).val() == 'Search') {
$(this)
.removeClass('inputblank')
.val('');
}
})
.blur(function() {
if ($(this).val() == '') {
$(this)
.addClass('inputblank')
.val('Search');
}
});
});
</script>
И это будет HTML:
<form id = "search_form">
<fieldset>
<legend>Search the site</legend>
<label for = "keywords">Keywords:</label>
<input id = "keywords" type = "text" class = "inputblank" value = "Search"/>
</fieldset>
</form>
Надеюсь, этого достаточно, чтобы заинтересовать как библиотеки GAJAXLib, так и jQuery.
Пользователь AJAXToolkit из http://asp.net
Для пользователей jQuery: ссылка naspinski jQuery кажется неработающей, но попробуйте эту: http://remysharp.com/2007/01/25/jquery-tutorial-text-box-hints/
В качестве бонуса вы получаете бесплатное руководство по плагину jQuery. :)
Я использую плагин Реми на tripfootprint.com, и он отлично работает; Мне нравится, что это достаточно просто, чтобы следовать и грокать.
$('input[value = "text"]').focus(function(){
if ($(this).attr('class')=='hint')
{
$(this).removeClass('hint');
$(this).val('');
}
});
$('input[value = "text"]').blur(function(){
if ($(this).val() == '')
{
$(this).addClass('hint');
$(this).val($(this).attr('title'));
}
});
<input type = "text" value = "" title = "Default Watermark Text">
Это называется «водяной знак».
Я нашел плагин jQuery водяной знак jQuery, который, в отличие от первого ответа, не требует дополнительной настройки (исходный ответ также требует специального вызова перед отправкой формы).
Я обнаружил, что плагин jQuery Водяной знак jQuery лучше, чем тот, который указан в верхнем ответе. Почему лучше? Потому что он поддерживает поля ввода пароля. Кроме того, установить цвет водяного знака (или других атрибутов) так же просто, как создать ссылку .watermark в вашем файле CSS.
Некоторое время назад я отправил решение для этого на моем веб-сайте. Чтобы использовать его, импортируйте один файл .js:
<script type = "text/javascript" src = "/hint-textbox.js"></script>
Затем аннотируйте любые входные данные, для которых вы хотите иметь подсказки, с помощью класса CSS hintTextbox:
<input type = "text" name = "email" value = "enter email" class = "hintTextbox" />
Дополнительная информация и примеры доступны здесь.
Но он сломан. Если я ввожу тот же текст, который был подсказкой, он ведет себя так, как если бы ввод не был введен (если я снова перейду к нему, а затем выйду из него)
@ Стефан: Да, это единственное предостережение, о котором я знаю. Вы действительно обнаружили, что это проблема на практике? Если это так, то вам, возможно, придется исследовать наслоение div выше и его отображение / скрытие. Это самое простое из известных мне решений. Я также хорошо деградирую, если отключен JavaScript.
Меня спровоцировала установка значения. У меня есть комбинированная потребность в предварительном заполнении существующим значением или значением по умолчанию и подсказкой, когда текстовое поле пусто
@Stephan - Сегодня я действительно столкнулся с необходимостью в этом и смотрю на плагины jQuery. Тот, на который ссылается в принятом ответе, страдает той же проблемой, что и моя. Вы знаете альтернативу?
Вы можете установить заполнитель, используя Атрибут placeholder в HTML (поддержка браузера). font-style и color могут иметь изменено с помощью CSS (хотя поддержка браузером ограничена).
input[type=search]::-webkit-input-placeholder { /* Safari, Chrome(, Opera?) */
color:gray;
font-style:italic;
}
input[type=search]:-moz-placeholder { /* Firefox 18- */
color:gray;
font-style:italic;
}
input[type=search]::-moz-placeholder { /* Firefox 19+ */
color:gray;
font-style:italic;
}
input[type=search]:-ms-input-placeholder { /* IE (10+?) */
color:gray;
font-style:italic;
}<input placeholder = "Search" type = "search" name = "q">Искал вот это, та - подробнее diveintohtml5.org/forms.html#placeholder
Теперь это должен быть принятый ответ. Атрибут placeholder, возможно, не получил широкой поддержки, когда он был первоначально опубликован в 2010 году, но теперь он поддерживается всеми текущими браузерами, кроме IE8.
Используйте jQuery Form Notifier - это один из самых популярных плагинов jQuery, и он не страдает ошибками, которые есть у некоторых других предложений jQuery здесь (например, вы можете свободно стилизовать водяной знак, не беспокоясь о том, будет ли он сохранен в базе данных) .
Водяной знак jQuery использует один стиль CSS непосредственно в элементах формы (я заметил, что свойства размера шрифта CSS, примененные к водяному знаку, также влияют на текстовые поля, а не на то, что я хотел). Плюс jQuery Watermark в том, что вы можете перетаскивать текст в поля (jQuery Form Notifier не позволяет этого).
Другой, предложенный некоторыми другими (на digitalbrush.com), случайно отправит значение водяного знака в вашу форму, поэтому я настоятельно не рекомендую это делать.
Другой вариант, если вы счастливы иметь эту функцию только для новых браузеров, - это использовать поддержку, предлагаемую атрибутом заполнитель HTML 5:
<input name = "email" placeholder = "Email Address">
При отсутствии стилей в Chrome это выглядит так:
Вы можете попробовать демо здесь и Стили заполнителей HTML5 с помощью CSS.
Обязательно проверьте совместимость этой функции с браузером. Поддержка Firefox была добавлена в версии 3.7. Хром в порядке. Internet Explorer добавил поддержку только в 10. Если вы нацеливаетесь на браузер, который не поддерживает заполнители ввода, вы можете использовать плагин jQuery под названием jQuery HTML5 Placeholder, а затем просто добавить следующий код JavaScript, чтобы включить его.
$('input[placeholder], textarea[placeholder]').placeholder();
@Duke, работает в Fx3.7 +, (Safari / Chrome) и Opera. IE9 не поддерживает его, поэтому я думаю, что IE8 тоже не поддерживает.
Да, я только что узнал сегодня, что FF3.6 его не поддерживает.
Я думаю, он снова переехал. Нашел здесь: github.com/mathiasbynens/jquery-placeholder
Предупреждение разработчика: «Internet Explorer 10 и 11 не показывают заполнитель, когда поле сфокусировано, даже если поле пустое».
Мне нравится решение «Знания Чикусе» - простое и понятное. Нужно только добавить вызов размытия, когда загрузка страницы будет готова, что установит начальное состояние:
$('input[value = "text"]').blur();
Полезен простой тег HTML "required".
<form>
<input type = "text" name = "test" id = "test" required>
<input type = "submit" value = "enter">
</form>
Он указывает, что поле ввода должно быть заполнено перед отправкой формы или нажатием кнопки отправки. Вот пример
Хотя это полезно, это не имеет отношения к вопросу.
Теперь это стало очень легко. В html мы можем указать атрибут заполнитель для элементов Вход.
например
<input type = "text" name = "fst_name" placeholder = "First Name"/>
проверьте подробности: http://www.w3schools.com/tags/att_input_placeholder.asp
Я использую простое однострочное решение javascript, которое отлично работает. Вот пример как для текстового поля, так и для текстового поля:
<textarea onfocus = "if (this.value == 'Text') { this.value = ''; }" onblur = "if (this.value == '') { this.value = 'Text'; }">Text</textarea>
<input type = "text" value = "Text" onfocus = "if (this.value == 'Text') { this.value = ''; }" onblur = "if (this.value == '') { this.value = 'Text'; }">
единственный «недостаток» - это проверка в $ _POST или в проверке Javascript, прежде чем делать что-либо со значением поля. Это означает проверку того, что значение поля не является «Текстовым».
Вы можете использовать атрибут placeholder = "".
Вот демонстрация:
<html>
<body>
// try this out!
<input placeholder = "This is my placeholder"/>
</body>
</html>
с тех пор, как был задан вопрос, атрибут-заполнитель HTML5 стал поддерживаться всеми браузерами.