JavaScript: текст внутри полей, при фокусе и выходе из него
Эта штука часто используется в формах быстрого поиска. Иногда замечаю, что на сайтах либо убирают событие onblur, чтобы по нажатию на кнопку submit, поле не потеряло значение и в поиск не ушла пустая строка, ну и другие не красивые решения, на скорую руку. Для себя я навалял «умную» функцию, которая всегда «знает» как себя правильно вести. Если кому нужно – забирайте.
function clearIt (obj) { if (typeof tmp_value=='undefined') { tmp_value = obj.value; } if (obj.tagName.toLowerCase()=='form') { var el, elName; for (i=0; i<obj.elements.length; i++) { el = obj.elements[i]; elName = el.nodeName.toLowerCase(); if (elName=='input' && el.type!='submit' && !tmp_value) { el.value = ''; tmp_value = 'undefined'; } } } if (obj.value==tmp_value) { obj.value = ''; } else if (obj.value==="") { obj.value = tmp_value; } }
Вызывать так:
<input type="password" name="password" value="password" onfocus="clearIt(this);" onblur="clearIt(this);">
Этот код эквивалентен:
<input name="story" type="text" onblur="if (this.value == '') {this.value = 'Искать...';}" onfocus="if (this.value == 'Искать...') {this.value = '';}" value="Искать...">P.S.
Задумка, конечно не идеальна, но позволяет без дополнительных средств просто и эффективно реализовать достаточно наглядную форму, без не допиленного placeholder и монструозной jQuery.
Если нужно, чтобы перед отправкой значение поля по умолчанию удалялось (если пользователь ничего не ввёл) – поместите в форму событие onsubmit=»clearIt(this);».
Функция пройдётся по всем input и очистит их значения. Кстати пример работы можно посмотреть здесь.
Три знака равно, это чтобы наверняка?
Это проверка не только на значение, но на тип. То есть (false == «») будет true, а (false === «») будет false.
Ужасный код. Правильно для хранения текста-подсказки использовать соответствующий аттрибут placehold из HTML 5. Тем более JS прямо в HTML писать — моветон, правильнее на input ставить класс, а JS в отдельном файле срабатывает для всех классов.
Ну и самая главная проблема, если пользователь не заполнит поле и нажмёт Отправить, то эти подсказки окажутся в форме.
В общем есть куча jQuery плагинов, а этот велосипед ужасен.
Ради одной такой вещи тащить с собой jQuery – это тоже не здорово.
Если ссылаться на jQuery на Google AJAX libraries, то пользователю качать ничего не придёться, так как у них jQuery же будет в кеше от другого сайта.
Это конечно хорошо, но всё равно полумеры. Да и не всегда такое можно делать.
По-мойму в этом случае проще подобие моего кода сделать и по событию onsubmit чистить поле, если оно равно tmp_value
Разве placeholder уже работает везде, без проблем?
Для тех у кого placehold не работает и вешать обработчик. Как минимум использовать просто, чтобы записывать туда подсказку.
В принципе согласен. Для меня это было не так важно, но я думаю в глобальном смысле этот механизм был бы лучше. Когда будет время и желание, сделаю такое.