Подсказки для полей input и textarea
Работа с html формами это одно из самых интересных занятий. Чего только не сделаешь, и автокомплит и валидация форм и отправка данных аяксом. Недавно меня заинтересовала проблема показа подсказок для пользователей. Например если это поле поиска, то можно показывать некоторые примеры. Например список распространённым запросов. При нажатии на поле, эти подсказки надо спрятать и если юзер ничего не ввёл - то снова их показывать.
В интернете есть куча примеров как это сделать, но я решил написать своё. Вот идея реализации. Для подсказок будем использовать аттрибут "title" и "value". Также элементам с такой функциональностью дадим класс "ClearOnClick". Тоесть элемент формы будет выглядеть примерно так:
-
<input type="text" title="Example: ajaxrussia, google, yahoo" value="Example: ajaxrussia, google, yahoo" name="query" class="ClearOnClick" />
После этого осталось только написать джаваскрипт код. Код будет работать на основе Prototype. Без него не запашет. Сделаю джаваскрипт класс ClearOnClick, который будет жить в namespace AjaxRussia. (Тут я писал про Javascript Namespaces).
-
var AjaxRussia = function() {
-
return {
-
ClearOnClick: Class.create({
-
initialize: function(class_name) {
-
document.observe('dom:loaded', function() {
-
-
$$('input.'+class_name+', textarea.'+class_name).each(function(field){
-
-
// Ждём фокуса на это поле
-
field.observe('focus', function(){
-
if(field.title && field.title.length> 0) {
-
if(field.value == field.title) {
-
field.value = "";
-
}
-
}
-
});
-
-
// А тут ждём когда с поля фокус пропадёт
-
field.observe('blur', function(){
-
if(field.title && field.title.length> 0) {
-
if(field.value == "") {
-
field.value = field.title;
-
}
-
}
-
});
-
-
});
-
});
-
}
-
})
-
};
-
}();
Код сохраним в отдельный файл - clearonclick.js. И всё. Теперь создаём инстанцию класса, как параметр передаём нужный нам CSS класс, и наши поля становятся волшебными
-
<script type="text/javascript" src="http://www.ajaxrussia.com/wp-content/uploads/2008/01/prototype.js"></script>
-
<script type="text/javascript" src="http://www.ajaxrussia.com/wp-content/uploads/2008/01/clearonclick.js"></script>
-
<script type="text/javascript">
-
var magicFields = new AjaxRussia.ClearOnClick('ClearOnClick');
-
</script>
Тестируем тут:
del.icio.us Забобрить!
13 Comments so far
Leave a reply
Приветик, при всем уважении:
Пиши почаще, я понимаю, работа и так далее, но уж очень редко, и что то ты под конец начал все больше про рельсы писать и так далее
Что то нет ни одного отличного и часто обновляемого блога по разным библиотекам и так далее
Ты был последней надеждой 
Не совсем понимаю зачем сюда AJAX прикручивать, или может я не внимательно статью прочитал )))
@Думаю: На работе сейчас все заняты новым дизайном сайта, поэтому мало времени
@DeadLy: Где ты аякс увидел?
Aleksandr, сорри, не аякс, а библиотеку prototype.
не проще ли.
onFocus=”this.value = ”;” onBlur=”this.value = (this.value == ”) ? ‘Поиск’ : this.value;”
Подскажите, как это еще и для input[type=password] сделать ?
2 Денис Радченко
да легко
<input type=”text” value=”Пароль:” onFocus=”this.value = ”; this.type = ‘password’;” onBlur=”this.type = (this.value ==” ) ? ‘text’:'password’ ; this.value = (this.value ==” ) ? ‘Пароль:’ : this.value; “>
но для пароля мне кажется это изврат
>Подскажите, как это еще и для input[type=password] сделать ?
Придётся сохранить нужный текст изображением и оперировать уже им как background’ом при помощи JavaScript+CSS.
2 Сергей Митрошин - чего-чего? :))) - я ж написал рабочий пример :)))
Steward, +1
это все делается одной строчкой кода
Если это нужно только для одного поля, то да. А если сайт большой и таких полей куча, то мой способ куда эффективнее.
чет навернуто слишком. единственная полезная вещь в данном случае - это утилита $$() прототайпа ну и перебор по массиву с each.
- меньше букв