Интерактивная форма с помощью CSS и JavaScript
В этом уроке мы разберем, как можно придать форме интерактивности, заставив ее реагировать на такие действия пользователя, как клик, наведение мыши а также на событие потери полем фокуса.
Никаких дополнительных инструментов и скриптов нам не понадобится. Мы будем использовать лишь html, css и javascript.
Для начала создадим новый html-документ:
<!DOCTYPE html> <html> <head> <title></title> <meta http-equiv="content-type" content="text/html; charset=utf-8"/> </head> <body> </body> </html>
В секции head подключим файл стилей:
<link href="styles/style.css" rel="stylesheet" type="text/css" />
Теперь создадим форму и первое поле в ней для ввода имени человека:
<form action="#" method="post">
<p>Ваше имя:<br />
<input type="text" class="input_form_text" name="name" value=""
onfocus="this.className='input_form_textact'"
onblur="if(this.value==''){this.value='Ваше имя'}; this.className='input_form_text'"
onclick="if(this.value=='Ваше имя'){this.value=''}" /></p>
</form>
Придадим этому полю класс input_form_text (см. весь код стилевого файла ниже):
body{
margin:0;
padding:0;
font-family: Verdana, Arial, sans-serif;
}
p{
margin:10px;
font-size: 13px;
}
.input_form_text {
width: 200px;
height: 20px;
border:1px solid #CCCCCC;
background-image: url("../img/gray_bg.png");
background-repeat: repeat-x;
background-position: center -3px;
text-align: center;
color: #96A1A6;
font: 12px Arial, sans-serif;
}
.input_form_textact {
width: 200px;
background-image: none;
border:1px solid #CCCCCC;
height: 20px;
color: #96A1A6;
box-shadow: 0 0 3px 0 #cccccc;
text-align: center;
}
.input_form_captcha_text {
width: 118px;
height: 20px;
border:1px solid #CCCCCC;
background-image: url("../img/gray_bg.png");
background-repeat: repeat-x;
background-position: center -3px;
text-align: center;
color: #96A1A6;
font: 12px Arial, sans-serif;
}
.input_form_captcha_textact {
width: 118px;
border:1px solid #CCCCCC;
background-image: none;
height: 20px;
color: #96A1A6;
box-shadow: 0 0 3px 0 #cccccc;
text-align: center;
}
.input_form_textarea {
width: 400px;
border:1px solid #CCCCCC;
background-image: url("../img/gray_bg.png");
background-repeat: repeat-x;
background-position: center -3px;
text-align: left;
color: #96A1A6;
font: 12px Arial, sans-serif;
}
.input_form_textareaact {
width: 400px;
border:1px solid #CCCCCC;
background-image: none;
color: #96A1A6;
box-shadow: 0 0 3px 0 #cccccc;
text-align: left;
}
input.formbutton {
border:1px solid #CCCCCC;
width: 150px;
color: #96A1A6;
font: 12px Arial, sans-serif;
background: url("../img/bg_button.png") no-repeat -6px -5px;
font-weight: 700;
text-transform: uppercase;
height: 25px;
padding-bottom: 1px;
margin-top: 5px;
}
input.formbutton:hover {
border:1px solid #CCCCCC;
width: 150px;
color:#96A1A6;
font: 12px Arial, sans-serif;
background: url("../img/bg_button.png") no-repeat -6px 8px;
font-weight: 700;
text-transform: uppercase;
height: 25px;
text-decoration: none;
box-shadow: 0 0 3px 0 #cccccc;
cursor: pointer;
padding-bottom: 1px;
}
Для поля мы просто устанавливаем отображение по умолчанию: задаем ширину, высоту, фоновый рисунок, выравнивание текста по центру, а также гарнитуру и размер шрифта.
Атрибут name для нас сейчас значения не имеет, а атрибут value в качестве значения имеет пустую строку: это значит, что в поле изначально ничего не будет написано.
Дальше начинается самое интересное. Мы начинаем работать с так называемыми событиями JavaScript. Событие - это некоторое действие, которое может быть зафиксировано, и на которое можно "выдать" ответную реакцию.
Итак, первое событие, с которым мы тут сталкиваемся - это событие focus (к имени любого события добавляется еще префикс on, который означает "по событию такому-то". В нашем случае: "по событию focus"). Данное событие происходит в тот момент, когда поле получает фокус, т.е. становится активным.
И в тот момент, когда наступает данное событие, мы даем JavaScript команду на применение класса к текущему элементу - т.е. к данному конкретному полю. Для этого мы обращемся к элементу через конструкцию this (что означает "этот"), после чего даем команду на смену класса с помощью className.
— Регулярная проверка качества ссылок по более чем 100 показателям и ежедневный пересчет показателей качества проекта.
— Все известные форматы ссылок: арендные ссылки, вечные ссылки, публикации (упоминания, мнения, отзывы, статьи, пресс-релизы).
— SeoHammer покажет, где рост или падение, а также запросы, на которые нужно обратить внимание.
SeoHammer еще предоставляет технологию Буст, она ускоряет продвижение в десятки раз, а первые результаты появляются уже в течение первых 7 дней. Зарегистрироваться и Начать продвижение
Таким образом, при получении фокуса поле для ввода имени меняет свой внешний вид, т.к. к нему применяется уже класс input_form_textact.
Второе событие, которое здесь используется - это событие blur (помните про префикс on!). Событие blur происходит, когда поле теряет фокус, т.е. из него уходит указатель (к примеру совершается клик в другом поле, либо вообще в произвольном месте страницы).
Итак, при потере фокуса мы совершаем простую проверку с помощью оператора if.
Проверка гласит следующее: "Если атрибут value текущего поля пуст, то мы задаем для атрибута value текущего поля значение 'Ваше имя' и, кроме того, придаем текущему полю класс input_form_text".
Таким образом, когда мы покидаем поле, в нем будут появляться указанные слова и к нему будет применяться тот самый изначальный класс, который применяется к нему при первоначальной загрузке страницы.
Наконец, третее событие, которое мы используем - это событие клика мышью - click.
Мы отслеживаем данное событие, и когда был зафиксирован клик в текущем поле, то мы запускаем проверку с помощью того же оператора if.
Теперь проверка состоит в следующем: "Если атрибут value текущего поля содержит слова 'Ваше имя', то нужно изменить содержимое этого атрибута value на пустое значение."
Здесь, как Вы видите, все тоже очень логично: когда человек кликает в поле со словами 'Ваше имя', то он, вероятно, собирается ввести свое имя, и поэтому поле нужно очистить, чтобы человеку было удобнее вводить свое имя, не стирая вручную то, что уже указано в поле.
Добавляем следующее поле - для ввода E-mail:
<p>Ваш E-mail:<br />
<input type="text" class="input_form_text" name="email" value=""
onfocus="this.className='input_form_textact'"
onblur="if(this.value==''){this.value='Ваш E-mail адрес'}; this.className='input_form_text'"
onclick="if(this.value=='Ваш E-mail адрес'){this.value=''}" /></p>
Здесь я ничего не комментирую, потому что все полностью аналогично первому полю, поменялось лишь значение атрибута name (что в нашем случае не принципиально) и слова Ваше имя изменились на Ваш E-mail адрес.
Третье поле, которое мы добавим - это поле типа textarea, предназначенное для ввода большого объема текстовой информации. Для такого типа полей атрибут value не предусмотрен, поэтому код здесь будет даже проще, чем в случае с двумя первыми полями:
<p>Текст сообщения:<br /> <textarea class="input_form_textarea" name="message" cols="45" rows="6" onfocus="this.className='input_form_textareaact'" onblur="this.className='input_form_textarea'" onclick="this.className='input_form_textareaact'"></textarea></p>
Мы задаем изначальный класс для данного поля и указываем его размеры с помощью атрибутов cols и rows.
По событию focus (получение фокуса) и click (клик мышью) мы применяем к полю класс с именем input_form_textareaact, а по событию blur (потеря фокуса) - снова возвращаем класс input_form_textarea, который применяется к полю изначально.
— Разгрузит мастера, специалиста или компанию;
— Позволит гибко управлять расписанием и загрузкой;
— Разошлет оповещения о новых услугах или акциях;
— Позволит принять оплату на карту/кошелек/счет;
— Позволит записываться на групповые и персональные посещения;
— Поможет получить от клиента отзывы о визите к вам;
— Включает в себя сервис чаевых.
Для новых пользователей первый месяц бесплатно. Зарегистрироваться в сервисе
Последнее поле, которое мы добавим - это поле типа text для ввода контрольных чисел:
<p>Введите цифры с картинки:</p>
<p><input type="text" class="input_form_captcha_text" name="captcha" value="Цифры с картинки" size="10"
onfocus="this.className='input_form_captcha_textact'"
onblur="if(this.value==''){this.value='Цифры с картинки'}; this.className='input_form_captcha_text'"
onclick="if(this.value=='Цифры с картинки'){this.value=''}" /></p>
Ситуация с этим полем аналогична ситуации с двумя первыми полями. При получении фокуса мы применяем класс input_form_captcha_textact.
При потере фокуса мы возвращаем изначальный класс input_form_captcha_text и, кроме того, если поле не заполнено, мы добавляем в него слова Цифры с картинки.
При клике же в данном поле мы снова делаем проверку, и если в поле находятся слова Цифры с картинки, мы их удаляем, передав атрибуту value в качестве значения пустую строку. Таким образом, при клике поле очищается, давая пользователю возможность ввести необходимый защитный код.
Теперь нам осталось добавить лишь кнопку отправки данных:
<p><input class="formbutton" name="send_message" type="submit" value="Отправить письмо"/></p>
Как Вы видите, здесь нет никакого JavaScript и все, что нас интересует - это класс, который применяется к форме для придания ей стилевого оформления.
Вот в общем-то и все. Наша форма, откликающаяся на действия пользователя, готова.
Поскольку вкусы у всех разные, Вы можете спокойно открыть файл стилей и подкорректировать оформление формы до такого состояния, которое Вам больше нравится.
Моя же задача в данном материале заключалась в том, чтобы показать Вам, как можно применять события JavaScript для достижения подобных эффектов.
Материал подготовлен на основе кода, предоставленного Владимиром Трофименко (сайт: psdmaster.ru)
P.S. Присмотритесь к премиум-урокам по различным аспектам сайтостроения, включая JavaScript, jQuery и Ajax, а также к бесплатному курсу по созданию своей CMS-системы на PHP с нуля. Все это поможет вам быстрее и проще освоить практические навыки веб-программирования:
Понравился материал и хотите отблагодарить?
Просто поделитесь с друзьями и коллегами!
Смотрите также:



















