Большой архив статей, книг, документации по программированию, вебдизайну, компьютерной графике, сетям, операционным системам и многому другому
 
<Добавить в Избранное>    <Сделать стартовой>    <Реклама на сайте>    <Контакты>
  Главная Документация Новости ИТ Программы Книги Games   Обои   Экспорт RSS E-Books
 
10 новых программ
CodeLobster PHP Edition 3.7.2
WinToFlash 0.7.0008
Free Video to Flash Converter 4.7.24
Total Commander v7.55
aTunes 2.0.1
Process Explorer v12.04
Backup42 v3.0
Predator 2.0.1
FastStone Image Viewer 4.1
Process Lasso 3.70.4
FastStone Image Viewer 4.0
Xion Audio Player 1.0.125
Notepad GNU v.2.2.8.7.7
K-Lite Codec Pack 5.3.0 Full
 
Наши сервисы
Рассылка новостей. Подпишитесь на рассылку сейчас и вы всегда будете в курсе последних событий в мире информационных технологий.
Новостные информеры. Поставьте наши информеры к себе и у вас на сайте появится дополнительный постоянно обновляемый раздел.
Добавление статей. Если вы являетесь автором статьи или обзора на тему ИТ присылайте материал нам, мы с удовольствием опубликуем его у себя на сайте.
 

ИЗУЧИТЕ КОМПЬЮТЕР
ОТ А ДО Я!

(Всего 230 видео урока)

Вы эффективно освоите: компьютер, Интернет, программы, удаление вирусов, установку windows xp, windows 7, видеомонтаж и многое другое...

УЗНАЙТЬ ПОДРОБНОСТИ О КУРСЕ! >>>

 
Поиск по сайту

 
 

  Раздел: Компьютерная документация -> Интернет технологии -> JavaScript

 

Проверка формы на JavaScript

В этой статье мы начнём разбираться с более сложными и функционально-законченными скриптами. Пройдём по шагам через все стадии - начиная с постановки задачи и заканчивая универсальным скриптом, готовым к употреблению. И начнём с проверки формы перед отсылкой на сервер.
Общие соображения и html-код формы

Проверка формы, пожалуй, одна из наиболее часто применяемых функций. Редкий сайт обходится без какой-либо её вариации, будь то простая отсылка сообщения на e-mail или форма сложного заказа в интернет-магазине. Польза скрипта очевидна - проверить, что пользователь заполнил все нужные поля перед отправкой и тем самым избежать проблемы получения пустых писем или отсутствия контактной информации отправителя.

Предположим, что форма у нас уже есть и состоит из следующих 4-х полей: имя, электронный адрес, тема сообщения и непосредственно само сообщение. Соответствующий html-код для такой формы будет выглядеть примерно так:

<form action="/cgi-bin/formmail.cgi" onsubmit="return sendform();">

Ваше имя: *<input type="text" name="name"><br>
Электронный адрес: *<input type="text" name="email"><br>
Тема сообщения: <input type="text" name="subject"><br>
Сообщение: <textarea name="message"></textarea><br><br>

<input type="submit" value="Отправить">
<input type="reset" value="Очистить">

</form>

* - необходимые для заполнения поля

Заметьте, что в отличие от обычной формы непосредственно в теге <form> мы отслеживаем событие onsubmit и при его наступлении вызываем функцию проверки формы sendform().

Почему выбран именно такой способ вызова функции? Ведь можно было применить, например, событие onclick? Ответ простой - при использовании события onclick кнопку "submit" придётся заменить обычной кнопкой. И, в случае, если в броузере отключена поддержка javascript, мы не сможем отправить форму (!). Отслеживание же события onsubmit лишено этого недостатка, т.к. даже при отключенной поддержке скриптов форма будет отправлена.

Будем считать, что необходимых для заполнения полей у нас всего два: имя посетителя и его электронный адрес.

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

Функция проверки формы перед отправкой

А теперь перейдём к главному - к написанию той самой функции, что будет непосредственно осуществлять проверку формы. Давайте подумаем, что нам от неё требуется? Ну, во-первых, проверить, что нужные поля заполнены, а во-вторых - отослать форму. В случае же, если несколько из обязательных полей пусты, нам нужно сформировать об этом сообщение пользователю и переместить курсор на соответствующий элемент.

Для начала напишем общую обвязку функции:


<script language="javascript">
<!--

function sendform() {

// Здесь мы разместим код функции

return true;
}

//-->

</script>

Применённый нами способ вызова функции через событие onsubmit в качестве результата работы функции требует возврата одного из логических значений: true или false. И, в зависимости от этого значения, форма либо будет отправлена, либо нет.

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


<script language="javascript">
<!--

function sendform() {

if (document.forms[0].name.value == "") {
alert('Пожалуйста, введите Ваше имя');
document.mailform.name.focus();
return false
}

if (document.forms[0].email.value == "") {
alert('Пожалуйста, введите электронный адрес');
document.mailform.email.focus();
return false
}

return true;
}

//-->

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

сначала проверяем, что данное поле является пустым. И если это так, то
выводим сообщение об ошибке при помощи встроенной функции alert(). После того, как пользователь закроет окошко, мы
воспользуемся методом focus() и переместим курсор на ошибочное поле. И, наконец,
выйдем из функции, установив флажок успешности выполнения в false.
В случае же, если проверяемое поле не было пустым, то соответствующий блок просто пропускается. При пропуске всех проверочных блоков функция в качестве результата возвращает true, что свидетельствует об успешной проверке.

Универсальная функция проверки

Если нам необходимо проверить всего два или три поля, то с таким методом проверки "по-одиночке" ещё можно смириться, но что, если их несколько десятков? А ведь такое не редкость - особенно в сложных анкетах. Поэтому мы немного модифицируем нашу функцию, чтобы она не зависела от количества проверяемых полей.

Первым делом мы создадим массив, где перечислим имена всех полей, которые требуют проверки:

required = new array("name", "email");

Такой подход позволит нам очень легко добавлять и модифицировать список обязательных полей без непосредственного изменения кода самой функции.

Дополнительно к вышеописанному массиву мы добавим ещё один, который будет содержать текст ошибки для конкретного поля:

required_show = new array("Ваше имя", "электронный адрес");

Это позволит нам свободно варьировать текст об ошибках и правильно пользоваться русским языком, а не удовольствоваться неудобоваримыми фразами типа "name не введён".

Имея массив обязательных для заполнения полей, всю проверку можно осуществлять в цикле. Вот как будет выглядеть модифицированная функция проверки:


<script language="javascript">
<!--

required = new array("name", "email");
required_show = new array("Ваше имя", "электронный адрес");

function sendform () {

var i, j;

for(j=0; j<required.length; j++) {
for (i=0; i<document.forms[0].length; i++) {
if (document.forms[0].elements[i].name == required[j] && document.forms[0].elements[i].value == "" ) {
alert('Пожалуйста, введите ' + required_show[j]);
document.forms[0].elements[i].focus();
return false;
}
}
}

return true;
}

//-->

</script>

В цикле происходит проверка всех полей формы на совпадение с "обязательными". В случае, если совпадение произошло, проверка осуществляется аналогично тому, как это было описано выше, но с одним нюансом - введение массива с сообщениями об ошибках потребовало небольшой модификации функции alert(), так что теперь текст ошибки напрямую зависит от имени поля.

Вот, в общем-то, и всё. Данная функция вполне универсальна и с минимальными корректировками (в сущности - содержимое двух массивов) может быть адаптирована к любой форме.

Автор: mike melnikov
Источник: www.cherry-design.spb.ru

Ссылки по теме
*.JS, когда грузиться думаешь?
AJAX
Выпадающее меню на CSS и JavaScript
JavaScript и GET-параметры
Создание универсального выпадающего меню
"Живые меню" или "Как сделать красиво с помощью CSS и JavaScript"
Предварительная загрузка рисунков ( preload ) и перекат ( rollover )
JavaScript FAQ

Вся документация JavaScript

 

Компьютерная документация от А до Я - Главная

 
 


 

загрузка...

Новости ИТ
04.02.2012  LG начала продажи в Европе внешнего Blu-ray привода модели BP40NS20
04.02.2012  Pioneer в ближайшее время выпустит пишущий Blu-ray XL привод
04.02.2012  Acer начал продажи своего новейшего неттопа модели Revo RL70
04.02.2012  Четырехканальные наборы модулей памяти DDR3 Super Talent Quadra объемом по 4 ГБ рассчитаны на частоту 1866 МГц
04.02.2012  AMD рассказала о планах на 2012-2013 годы по части графических решений
04.02.2012  Габариты алюминиевого корпуса для ПК Xigmatek Gigas Micro-ATX Cube равны 278 x 396 x 322 мм
04.02.2012  На будущей неделе Tokina анонсирует стабилизированный объектив AT-X 70-200mm f/4 PRO IF FX
04.02.2012  СП Corning и Samsung Mobile Display будет выпускать стеклянные подложки для дисплеев OLED
03.02.2012  В Интернет попали неофициальное изображение и технические подробности предстоящего смартфона Samsung Galaxy S II Plus
03.02.2012  AMD сделала доступными попредзаказу три процессора линейки FX-Series
03.02.2012  ViewSonic начала продажи LED-монитора VX2336s-LED
03.02.2012  Orico X-Gear: дисковод для SATA-накопителей
03.02.2012  Оптический привод Pioneer BDR-S07J позволяет записывать диски BDXL
03.02.2012  Блок питания Super Flower мощностью 430 Вт имеет сертификат 80Plus Gold
03.02.2012  Начался прием заказов на процессоры AMD FX-4170 и FX-6200
03.02.2012  Монитор ViewSonic VX2336s-LED оснащён панелью SuperClear IPS со светодиодной подсветкой
03.02.2012  В накопителях Transcend SSD720 используются контроллеры SandForce последнего поколения
03.02.2012  Анонсирован зеркальный объектив Kenko 400mm f/8 для камер систем Micro Four Thirds и Sony NEX
03.02.2012  ASUS анонсировала пишущий DVD-привод DRW-24B5ST с поддержкой функции Disc Encryption II
03.02.2012  Zalman планирует уже в этом месяце начать продажи двух новейших геймерских Mid Tower-корпусов
03.02.2012  Packard Bell обновила свой 10,1-дюймовый нетбук модели Packard Bell dot s
03.02.2012  MSI показала 10-дюймовый нетбук Wind U180 на базе платформы Intel Cedar Trail
03.02.2012  Titan начала продажи оригинального CPU-кулера Siberia TTC-NC55TZ(RB)
03.02.2012  RunCore представила новейшие SSD-диски линейки Pro-V MAX
03.02.2012  Появились первые тесты инженерного образца 10-ядерного процессора Ivy Bridge-EP
03.02.2012  Внешние накопители Apricorn Aegis Padlock DT шифруют данные по алгоритму AES-XTS
03.02.2012  Системные платы подорожают еще до конца текущего квартала
03.02.2012  Камера COOLPIX S3300 доступна в восьми вариантах цветового оформления
03.02.2012  Verizon представит Droid 4
03.02.2012  Опубликован результат APU AMD Trinity A6 для ультратонких ноутбуков в тесте 3DMark

 
Advertisment



 
Интересное в сети

Copyright © CompDoc.Ru
При цитировании и перепечатке ссылка на www.compdoc.ru обязательна. Карта сайта.
 
Rambler's Top100