Показать пример текста с призраками в поле, а затем очистить его при размытии

Я пытаюсь дублировать эффект, используемый в поле поиска Firefox, где, если поле поиска не имеет фокуса (пользователь не щелкнул внутри него), серым текстом просто написано Google. Затем, когда пользователь щелкает в поле, текст удаляется, и они могут ввести свой поисковый запрос.

Я хочу использовать это, чтобы предоставить пример данных поля для веб-формы.

Синтаксис JQuery был бы предпочтительнее простого javascript, но простой JS тоже подойдет.

Спасибо, SO Hive Mind!

Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
В настоящее время производительность загрузки веб-сайта имеет решающее значение не только для удобства пользователей, но и для ранжирования в...
Безумие обратных вызовов в javascript [JS]
Безумие обратных вызовов в javascript [JS]
Здравствуйте! Юный падаван 🚀. Присоединяйся ко мне, чтобы разобраться в одной из самых запутанных концепций, когда вы начинаете изучать мир...
Система управления парковками с использованием HTML, CSS и JavaScript
Система управления парковками с использованием HTML, CSS и JavaScript
Веб-сайт по управлению парковками был создан с использованием HTML, CSS и JavaScript. Это простой сайт, ничего вычурного. Основная цель -...
JavaScript Вопросы с множественным выбором и ответы
JavaScript Вопросы с множественным выбором и ответы
Если вы ищете платформу, которая предоставляет вам бесплатный тест JavaScript MCQ (Multiple Choice Questions With Answers) для оценки ваших знаний,...
1
0
9 855
6
Перейти к ответу Данный вопрос помечен как решенный

Ответы 6

  $(selector).text('Google'); 
  $(selector).click(function(){
    $(this).text('');
  });

Вероятно, есть более элегантный способ сделать это, но при этом предполагается, что в вашем поле нет текста при загрузке страницы. Если это так, вы можете удалить первую строку.

Я не тестировал это, но должно работать.

Что-то не так с этим: 1. Не повторяется, если вы оставите поле пустым. 2. Не поддерживает вкладки. 3. Отсутствует фантомный текст. 4. Очищает пользовательский текст при перефокусировке.

FlySwat 12.11.2008 23:11
Ответ принят как подходящий
<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.

Kon 12.11.2008 23:16

С этим есть несколько подводных камней. Если вы отправите эту форму без изменения значений, в качестве текста будет отправлено "Google". Возможно, это не то, что вам нужно. Даже если вы отфильтруете значение на стороне сервера, браузер клиента сохранит значение и будет использовать его в качестве значения по умолчанию при будущих просмотрах страниц.

Josh 13.11.2008 16:46

Другой способ - использовать некоторый 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

Другие вопросы по теме