вторник, 6 декабря 2011 г.

Используем jQuery для изменения стилей поля ввода формы при нажатии

Используем jQuery для изменения стилей поля ввода формы при нажатии

Многие формы скучные и простые, не позвольте Вашей форме быть такой же. Этот урок покажет Вам как можно их улучшить с помощью классов CSS и значений по умолчанию, которые меняются в зависимости от выбора элемента формы.

Цель

Мы хотим сделать форму с полями для ввода, которые бы меняли свой внешний вид при нажатии. Давайте начнем, но прежде взглянем на пример.

Шаг №1 - Подготовка

Для начала необходимо подготовить саму форму.

 <form> <input name="status" id="status" value="Введите что-то здесь" type="text"/> <input value="Submit" type="submit"/> </form>

Я ввел "Введите что-то здесь" как значение по умолчанию для ввода. Это текст, который будет отображаться в форме, но при нажатии он исчезнет.

Шаг №2 - CSS

Теперь давайте сделаем форму красивой. Тут уже можно оформить все по Вашему вкусу, но обязательно необходимо включить классы для неактивного\активного состояния формы. Для этого я использовал значения idleField и focusField.

 <style type="text/css"> *{ margin:0; padding:0; font:bold 12px "Lucida Grande", Arial, sans-serif; } body { padding: 10px; } #status{ width:50%; padding:10px; outline:none; height:36px; } .focusField{ border:solid 2px #73A6FF; background:#EFF5FF; color:#000; } .idleField{ background:#EEE; color: #6F6F6F; border: solid 2px #DFDFDF; } </style>

Также важно заметить, если Вы хотите убрать голубое свечение, которое отображается в Safari вокруг поля ввода при нажатии мышкой, Вам необходимо включить в CSS файл следующее значение outline:none.

Шаг №3 - jQuery

Эта часть добавит в Вашу форму эффект при нажатии. Нам необходимо достичь 2-х результатов: 1) Выбранное поле должно перейти из неактивного в активное состояние, и при этом должен поменяться CSS класс; 2) Текст по умолчанию ("Введите что-то здесь") должен исчезнуть. Также мы хотим, чтобы поле теряло фокус (не выделялось) при переходе на следующий элемент страницы или формы.

 $(document).ready(function() { $('input[type="text"]').addClass("idleField"); $('input[type="text"]').focus(function() { $(this).removeClass("idleField").addClass("focusField"); if (this.value == this.defaultValue){ this.value = ''; } if(this.value != this.defaultValue){ this.select(); } }); $('input[type="text"]').blur(function() { $(this).removeClass("focusField").addClass("idleField"); if ($.trim(this.value == '')){ this.value = (this.defaultValue ? this.defaultValue : ''); } }); });

Давайте подробно рассмотрим каждую часть:

Для каждого текстового поля применить класс idleField

 $('input[type="text"]').addClass("idleField");

Когда на поле нажимают мышкой, необходимо удалить неактивный стиль и добавить активный.

 $('input[type="text"]').focus(function() { $(this).removeClass("idleField").addClass("focusField"); });

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

 if (this.value == this.defaultValue){ this.value = ''; }

Если пользователь уже что-то напечатал в поле, текст не удаляется, а выделяется. За это отвечает код:

 if(this.value != this.defaultValue){ this.select(); }

Код ниже описывает правила про то, что должно случиться, когда пользователь отводит мышку и переходит дальше.

 $('input[type="text"]').blur(function() { $(this).removeClass("focusField").addClass("idleField"); if ($.trim(this.value) == ''){ this.value = (this.defaultValue ? this.defaultValue : ''); } });

Стоит обратить внимание на использование $.trim(). Данная функция убирает пробелы до и после текста, введеного юзером. Имейте ввиду, что если пользователь ничего не заполнит в  форме, а оставит текст по умолчанию, тогда форма все равно обработается. Можно исправить это с помощью специального скрипта проверки при нажатии кнопки "Отправить".

Комментариев нет:

Отправить комментарий