Валидация полей произвольных форм и контейнеров на jQuery. Пишем jQuery валидацию формы. Специальные типы элемента Input

 Валидация полей произвольных форм и контейнеров на jQuery. Пишем jQuery валидацию формы. Специальные типы элемента Input

30.04.2019
Добрый день, уважаемый читатель. В этой статье я бы хотел обратиться к теме проверки содержимого форм на стороне клиента. На заре становления языков, работающих на клиенте, эта задача была основной. Со временем эти языки обросли новыми возможностями (манипуляция DOM, управление стилями и пр.), но задача проверки форм не исчезла. Правда с появлением HTML5 стало возможным указывать такой тип поля формы, как email, и браузер сам возьмет на себя его проверку. Такая возможность на данный момент реализована в Opera, так что расчитывать на нее пока особо не приходится. Поэтому я бы и хотел рассмотреть этот вопрос основательно. В большинстве случаев валидация проводится так: каждому полю раздаётся id, и затем при submit"е вытаскиваем их, попутно проверяя содержимое. И всем хорош данный подход, кроме отсутствия в нем системности. Поэтому хочу предложить вашему вниманию свое решение данной проблемы.Итак понеслася! В качестве примера приведена несложная форма, содержащая поля для имени, почтового ящика и пола.
HTML-код файла:
input { border: 1px solid #D4E2F7; } input { margin: 3px 0px 3px 15px; } ....

male
female

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

Function createField() { var members = new Array("required", "regexp"); for(var i = 0; i < arguments.length; i++) { this] = arguments[i]; } } // absolute regexp createField.prototype.regexp = /^{1,}$/ig; createField.prototype.valid = false; createField.prototype.required = true; createField.prototype.nullify = function() { this.valid = false; };

Далее в прототипе укажем значения по умолчанию полей.
regexp - регулярка, которой должно удовлетворять значение соответствующего поля.
valid - результат проверки значения поля регулярным выражением regexp .
required - индикатор того: требуется ли данное поле (можно ли оставить поле незаполненным).
nullify() - метод, возвращающий поле valid в исходное состояние.

Var single = new Array(); single["name"] = new createField(); single["email"] = new createField(true, /^+@+\.{2,4}$/); single["sex"] = new createField(true, /male$/ig);
Создаем как бы праобраз нашей формы. В ней будет 3 поля с именами name, email и sex, каждое из которых не может остаться незаполненным. Притом значения 2х последних полей должны удовлетворять указанным во втором параметре регулярном выражении.
var Singleton = { fields: single, regForm: false, nullify_values: function() { for(i in this.fields) { this.fields[i].nullify(); } }, ... };
В данном участке кода мы объявляем объект Singleton. Назначение поля fields понятно. Поле regForm - объект, содержащий форму. Через него мы и будем получать доступ к полям формы и их значениям.
Метод nullify_values() возвращает значение поля valid у «подобъектов» (т.к. fields это массив объектов) в исходное состояние.

И напоследок самое интересное. Метод submit() , который и заключает в себе основной функционал.
submit: function() { if(this.regForm) { // set property valid to false for every form field this.nullify_values(); var i = null; // walks through the form fields, pick and if required check their values for(i = 0; i < this.regForm.elements.length; i++) { // current field var oField = this.regForm.elements[i]; switch (oField.type) { case "button": case "submit": case "reset": break; case "checkbox": case "radio": if(!oField.checked) { break; } default: // javascript trim function analogue oField.value = oField.value.replace(/^\s*/, "").replace(/\s*$/, ""); if(!oField.value) { oField.value = ""; } // if this field is out of interest if(!this.fields.required) { this.fields.valid = true; this.regForm[i].style.border=""; } // if this field is required else { var match = this.fields.regexp.test(oField.value); // ... and fits regular expression if(match) { this.fields.valid = true; this.regForm[i].style.border=""; } this.fields.regexp.test(oField.value); } } } // now all we need is to check if the whole form is valid // we perform it by comparing number of form fields and number of valid fields // they should be equal var validForm = 0; var fieldsLength = 0; for(i in this.fields) { fieldsLength++; if(this.fields[i].valid) { validForm++; } else { this.regForm[i].style.border="1px solid #FF0000"; break; } } if(validForm == fieldsLength) { this.regForm.submit(); } else { this.nullify_values(); return false; } } }
Сначала обнуляем значения valid. Затем проходимся по полям формы. Если поле не несет особой смысловой нагрузки (типа reset) или не является помеченным галочкой - пропускаем его. Удаляем ведущие и замыкающие пробелы. И если поле является необходимым - проверяем его содержимое с помощью регулярного выражения. Если нет - идем дальше. Теперь осталось посчитать общее количество полей и количество валидных полей. И если они совпадают, то форму можно отправлять.
single = null; window.onload = function() { var regForm = document.forms; Singleton.regForm = regForm; Singleton.regForm.onsubmit = function() { return Singleton.submit(); }; };
И в самом конце мы «занулляем» объект single , чтобы невзначай не изменить значений Singleton.fields , выхватываем форму и даем ей обработчик события submit .

Остренькое1 . Если мы зануляем single , то не уничтожим ли мы попутно и Singleton.fields ? Нет. И вот почему. Присваивая переменной fields объект мы не передаем сам объект, а лишь ссылку на него. Физически объект хранится в так называемой Memory Heap . И не будет удален оттуда garbage collector"ом до тех пор, пока есть хотя бы одна ссылка на него. Таким образом мы лишь удалили ссылку на массив, и объекты не были уничтожены, т.к. существует еще одна ссылка на них, а именно Singleton.fields .

2 . В случае большого количества полей, не требующих валидации, не получится ли так, что создается много объектов, свойства которых по большому счету не нужны? Нет. И вот почему. Когда мы достаем поле объекта интерпретатор JS сначала смотрит в самом объекте и если не находит - в прототипе. Таким образом значения по умолчанию хранятся в прототипе в единственном экземпляре, что не есть накладно.

3 . Почему когда содержимое поля удовлетворяет регулярному выражению я делаю проверку еще раз? На это вразумительного ответа у меня нет. Опытным путем я заметил, что когда применяется функция RegExp.test() , то сначала она возвращает результат ожидаемый, а потом прямо противоположный. Попробуйте закомментировать эту строку и сами увидите, как поведение станет непредсказуемым. В обычном случае такого не наблюдается.

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

Посмотреть работу скрипта можно

Думаю многие знают, что такое форма: это совокупность элементов, которые могут представлять собой текстовое поле (text), текстовое пространство (textarea), чек боксы (checkbox), радио кнопки/переключатели (radio), выпадающие списки (option), кнопки (button, submit). Эти поля посылают данные – имя/значение. Данные соответственно обрабатываются на сервере и результат возвращается пользователю. Валидация – это проверка данных заполненных полей на соответствие какому-то шаблону.

Проверка может осуществляться с помощью html5, javascript/jQuery на клиенте и также на сервере. Любое поле должно иметь атрибут ‘name’ Также input поля могут иметь атрибут ‘value’ . Если значение value заполнено, то оно будет отображаться на страничке по умолчанию. Input поля могут обрамляться тегами . Применение данного тега – является хорошим стилем программирования. Когда он используется то у input поля появляется заголовок при клике на который становится активным данный input или переключатель, а также можно назначать горячие клавиши. Есть два варианта использования: первый вариант связка for ссылающаяся на id нужного поля и второй вариант просто обрамить поле input: Имя либо Имя: Текстовое поле это или У полей с типом password вводимые символы отображаются звездочками для безопасности. Чтобы загрузить файл, используется поле Input с type=”file” Поле с галочкой – Input type=”checkbox”. Если поставить галочку, то такое поле получит атрибут “checked” Радио кнопка – Input type=”radio”, в отличии от чекбокса можно выбрать только одно значение. Для передачи значений, которые не нужно видеть юзеру, используются скрытые поля- Input type=”hidden”. Кнопка отправки формы – Input type=”submit”. Значение value будет отображаться на кнопке, например value=”click me!”. Просто кнопка – Input type=”button” или теги click me. Поле для большого куска текста – Здесь текст Поле выбора значения из выпадающего списка: Выбрать… Выбор 1 Выбор 2 Задать выбранное поле по умолчанию поможет атрибут selected. Если задать атрибут multiple то можно выбрать несколько значений: …

HTML 5 Input

Input type=”date” выводит календарь для выбора даты. Input type=”color” выводит палитру для выбора цвета. Input type=”range” выведет слайдер для выбора значения от 0 до 100%. Также появились новые атрибуты: autocomplete, placeholder, required, pattern и так далее… Контейнер для всех полей, это тег form. Его возможные параметры: Action – куда послать данные, Enctype – как браузеру воспринимать передаваемые данные, Method – метод передачи данных GET (через url) или POST (фоновая передача).

HTML 5 Валидация

HTML5 Валидация будет осуществляться самим браузером основываясь на типе поля. Например глянем на форму и увидим типы e-mail , url , number , datetime :

  • Email
  • Website
  • Age
  • Date & Time
  • send

    Из плюсов это конечно автоматическая проверка, из минусов можно отметить то, что старые браузеры не поддерживают HTML5.

    Если добавить атрибут required : то данное поле должно быть обязательно заполнено, иначе появится предупреждение.

    Если добавить атрибут placeholder то его значение появится в поле в роли подсказки, например:

    Проверить поддержку какого-то параметра браузером, можно на сайте caniuse.com

    Ограничить количество вводимых символов можно свойством maxlength , например:

    Параметры min/max ограничивают цифровые значения: . Также это ограничение можно присваивать датам:

    Параметр multiple позволяет выбирать несколько файлов с помощью Input=”file” или делает возможным ввод нескольких емэйлов в поле Input=”email”.

    Разрешить загрузку только определенных типов файлов можно указав mime-type, например только для PNG:

    Или только для любых изображений:

    Для mp3 и видео:

    Можно также использовать регулярные выражения. Например паттерны:

    Поле для ввода только слова Привет: . Если надо сделать возможность ввода Привет и привет, то меняем паттерн так: pattern=”[Пп]ривет”. И так далее. Еще примеры. Прописные буквы: + Плюс означает один или больше. Строчные и прописные +

    Наряду со всеми новыми атрибутами, типами input и CSS3 псевдо-классами, глава о HTML5 формах, так же определяет простой JavaScript API, что позволяет расширять возможности валидации форм несколькими полезными встроенными методами, атрибутами и событиями. Давайте взглянем на обновленное демо , которое подключает API для проверки ограничений валидации.

    Каждое поле формы имеет новый атрибут validity . Атрибут validity возвращает объект ValidityState , который предоставляет текущее состояние валидности. Объект ValidityState содержит несколько булевых переменных, которые определяют какое состояние у определенного элемента. В основном их ответы это true/false которые дают возможность разработчику понять что не так с полем:

    • valueMissing
      Этот атрибут возвращает true, если обязательное поле пустое.
    • typeMismatch
      Распространяется на новые типы input. Например, если значение email не корректно, этот атрибут возвратит true.
    • patternMismatch
      Если элемент содержит атрибут pattern и его значение не соответствует условиям регулярного выражения, атрибут вернет true.
    • tooLong
      Если значение какого либо элемента превышает его maxlength, этот атрибут вернет true.
    • rangeUnderflow и rangeOverflow
      Если значение элемента выходит за пределы атрибутов min или max, то этот атрибут вернет true.
    • stepMismatch
      Когда элемент с атрибутом step не соответствует требуемому значению, этот атрибут вернет true.
    • valid
      Если любое из вышеперечисленных значений возвращает true, то этот атрибут вернет false. В противном случае, если все условия выполнятся, то вернет true.
    Это еще не все Событие invalid несет еще одну полезную функцию. Он будет вызываться полем, пока его значение будет оставаться невалидным. Так что, с его помощью, мы можем изменять стили полей в соответствии с их текущим состоянием.

    Кроме того, метод checkValidity() может быть выполнен на любом отдельном поле или формы в целом, вернув true или false.

    Применим к демо Давайте возьмем наше предыдущее демо и улучшим его при помощи API проверки ограничений валидации. Принимая то, что мы узнали от Luke Wroblewski в статье Inline Validation in Web Forms и наши собственные данные, мы можем применить эти идеи в нашей демо форме, чтобы создать оптимальный валидатор.

    Первое, что мы можем исправить - это мгновенная стилизация для не валидного поля. Вместо того, чтобы сразу изменить стиль поля, показывая, что пользователь вводит некорректные данные, мы ждем пока пользователь уйдет из поля.

    Если данные отвечают требованиям, даже в то время когда поле в фокусе, мы позволим пользователю узнать, что поле валидно. Мы делаем это путем добавления для input события для проверки валидности поля. Если все верно, то мы обновляем стили и показываем результат сразу.

    Если поле имеет некорректное значение, а пользователь переходит к следующему полю, событие blur проверит валидность поля, а потом применит invalid стили. Для того, чтобы пользователь мог знать об ошибке. Это сохранит отображение стилей ошибок, до их исправления.

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

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

    Поддержка браузерами

    Скрипт протестирован и работает в следующих браузерах:

    • Firefox 1+ - FF4 будет иметь встроенную поддержку;
    • Chrome 4+ - Встроенная поддержка;
    • Safari 3.2+ - Safari 5 имеет встроенную поддержку;
    • Opera 9.6+ - Встроенная поддержка.
    Функции эмулируемые скриптом:
    • Каждое поле имеет объект validity , который дает возможность узнать текущее состояние;
    • Доступен метод checkValidity() указывающий что форма или какой то отдельный элемент не валиден;
    • Поддержка атрибутов placeholder , required , min , max и step ;
    • Поддержка атрибутов placeholder и required для textarea ;
    • Поддержка атрибура required для элемента select ;
    • Типы email и url для input будут проверяться с помощью встроенного регулярного выражения.
    Изобилие проверок Поддержка браузерами HTML5 форм и моделя CSS3 UI начинает улучшаться. Opera9 продолжит поддержку Web Forms 2.0 пока они не будут объединены с HTML5 формами. В Chrome появилась поддержка с версии 4, Safari получил ее недавно с выходом версии 5, Firefox должен добавить поддержку в предстоящей бета-версии 4 и IE9, если они продолжат свое развитие в таком темпе, тоже должен получить поддержку. Добавить метки

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

    В этом уроке, мы узнаем, как написать jquery валидацию форм в режиме реального времени. Если вы хотите увидеть, что у вас получиться, вы можете нажать «ДЕМО» и посмотреть.

    Что мы сегодня узнаем? Как мы реализуем jquery валидацию?

    Существует множество способов достичь этого, вот самые распространенные из них:

  • Мы можем создать SPAN тег (в котором будет содержаться информация о валидации), рядышком с полем ввода, и дать ему определенный ID, через которого мы к нему обратимся.
  • Мы можем обвернуть каждое поле в P тег, внутри которого создать SPAN, который будет содержать информацию о валидации поля.
  • Также можно обвернуть поле P тегом, внутри которого «привыть» SPAN (на лету с помощью jquery).
  • Это все будет работать, но это не наилучший путь реализации. Почему? Потому, что слишком много лишнего HTML кода в форме ввода, который нам не нужен. Нужно соблюдать .

    Мы сделаем это так, как я сделал для себя. На мой взгляд, это наиболее правильное решение, хотя никто так не делает. Честно говоря, я никого не видел, кто бы еще так делал… если знаете, напишите мне в комментарии в конце урока.

    Что же мы будем делать?
  • Мы напишем простую форму, красивую и с чистым семантическим кодом, без лишних тегов.
  • Так как люди заполняют каждое поле в отдельности, мы можем отследить и валидировать его на лету:
    • Определить его позицию в окне (верхний левый угол)
    • Определить его ширину
    • Так мы будем знать, где находиться его окончание.
    • Добавим информацию о валидации в DIV блоке с определенным ID, справа от конкретного поля. Также присвоим соответственные классы.correct или.incorrect.
  • Заметьте: это также приемлемо для людей не использующих JavaScript в своем браузере. Таковы будут валидированы на серверной стороне.

    Структура проекта

    Нам нужно будет создать три файла:

  • index.html
  • style.css
  • validate.js
  • Мы рассмотрим все поэтапно… сначала HTML код, потом необходимые CSS стили, позже мы сфокусируемся на основном - jQuery скрипте валидации формы.

    Пишем HTML

    Разложим все по полочкам…

    Шаг 1 - создаем базовый HTML код

    Для начала, создайте файл index.html и вставьте в него этот базовый код. Вы видите, что подключаем jQuery файл внизу, перед validation.js, который содержит наш скрипт валидации.

    Шаг 2 - создаем форму, разделенную на три части

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

  • Персональная информация (имя пользователя, день рождения, пол, транспортное средство).
  • Email (поле ввода email пользователя).
  • О себе (краткая информация о пользователе).
  • Real-Time Form Validation Using jQuery Personal Info Email About You Шаг 3 - добавляем поля и кнопку подтвердить

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

    • Три поля INPUT (имя пользователя, дата рождения, email адресс).
    • RADIO кнопки, для выбора пола.
    • CHECKBOX для транспортных средств пользователя.
    • TEXTAREA для информации о пользователе.
    • BUTTON для кнопки «Подтвердить».

    Мы будем обвертывать каждый LABLE и поле ввода в тег P, чтобы разделить на отдельные блоки. Теперь ваш финальный файл index.html будет выглядеть следующим образом:

    Real-Time Form Validation Using jQuery Personal Info

    Full name:

    Day of birth (dd-mm-yyyy):

    I am: Man Woman

    I own: car airplane bicycle ship

    Email

    Email ([email protected]):

    About You

    Tell us a little bit about yourself:

    submit

    Это может выглядеть немного страшновато, но это потому что много полей ввода в нашей форме. На самом деле, здесь нет ничего сложного. Сохраните ваш файл, и посмотрите в браузере, что получилось. Теперь немного украсим…

    Добавляем CSS

    Так как CSS стилизирование не основная тема сегодняшнего урока, мы не будем на этом останавливаться. Просто нам необходим этот CSS код, чтобы форма выглядела красиво и все блоки были на своих местах.

    Создайте файл style.css, вставьте в него код ниже. Теперь форма с будущей jquery валидацией, выглядит потрясающе. Не так ли?

    Body { background: #efefef; margin: 0; padding: 0; border: none; text-align: center; font: normal 13px Georgia, "Times New Roman", Times, serif; color: #222; } #content { width: 500px; margin: 0 auto; margin-bottom: 25px; padding: 0; text-align: left; } fieldset { margin-top: 25px; padding: 15px; border: 1px solid #d1d1d1; -webkit-border-radius: 7px; -moz-border-radius: 7px; border-radius: 7px; } fieldset legend { font: normal 30px Verdana, Arial, Helvetica, sans-serif; text-shadow: 0 1px 1px #fff; letter-spacing: -1px; color: #273953; } input, textarea { padding: 3px; } label { cursor: pointer; } .block { display: block; } small { letter-spacing: 1px; font-size: 11px; font-style: italic; color: #9e9e9e; } .info { text-align: left; padding: 5px; font-size: 11px; color: #fff; position: absolute; display: none; -webkit-border-radius: 5px; -moz-border-radius: 5px; border-radius: 5px; -webkit-box-shadow: -1px 1px 2px #a9a9a9; -moz-box-shadow: -1px 1px 2px #a9a9a9; box-shadow: -1px 1px 2px #a9a9a9; } .error { background: #f60000; border: 3px solid #d50000; } .correct { background: #56d800; border: 3px solid #008000; } .wrong { font-weight: bold; color: #e90000; } .normal { font-weight: normal; color: #222; } #send { background: #3f5a81; width: 100%; border: 5px solid #0F1620; font: bold 30px Verdana, sans-serif; color: #fafafa; text-shadow: 1px 1px 1px #0F1620; -webkit-border-radius: 7px; -moz-border-radius: 7px; border-radius: 7px; } #send:hover { background: #4d76b1; border: 5px solid #253750; color: #fff; } #send:active { text-indent: -10px; }

    Пишем jQuery валидацию формы

    Это наиболее интересная и увлекательная часть урока. Но для начала, нам необходимо подумать и описать основные моменты нашей работы. Нужно все спланировать.

    Планируем

    Перед тем как будем писать, задайте себе три вопроса:

  • Что нам нужно от этого скрипта?
  • Как мы хотим это сделать?
  • Как мы этого добьемся?
  • Это понятно, мы хотим, чтобы скрипт проводил валидацию формы. Но как? Мы хотим, чтобы он делал это в режиме реального времени (когда пользователь завершит заполнение поля ввода) и при нажатии на кнопку «Подтвердить». Поэтому нам придется написать несколько функций: отдельно для каждого поля ввода и для всех форм (которая вызовется при нажатии кнопки «Подтвердить»).

    Чтобы предотвратить повторение кода, нам нужно будет создать JavaScript объект для этого.

    Что нам для этого нужно?

    JS объект в нашем случае будет называться jVal , он будет содержать следующие методы:

    • jVal.fullName
    • jVal.birthDate
    • jVal.gender
    • jVal.vehicle
    • jVal.email
    • jVal.about

    Переменная, которая будет содержать статус текущей ошибки - jVal.errors. И метод, который проверяет, существуют ли какие-то ошибки и подтверждает отправку формы или отклоняет. Если нашлись какие-то ошибки, направляет пользователя в начало формы, где он может заполнить все поля корректно.

    Метод называется - jVal.sendIt

    Теперь, мы можем приступить к разработке jQuery скрипта валидации форм. Когда мы напишем первый метод, далее все пойдет проще и быстрее.

    Начинаем работу

    Основа кода проста, абсолютно весь jquery код будет содержаться внутри этого синтаксиса:

    $(document).ready(function(){ jVal = { }; });

    Валидация поля имени пользователя

    Наш первый метод будет обрабатывать поле «имя пользователя». Вставьте его внутрь jVal объекта, как показано на примере:

    Var jVal = { "fullName" : function() { } };

    Теперь напишем несколько строк кода внутри метода. Просто вставьте их, далее мы рассмотрим что это значит:

    $("body").append(""); var nameInfo = $("#nameInfo"); var ele = $("#fullname"); var pos = ele.offset();

    Линия 1: Мы добавляем DIV блок в документ. Class info, придает некий стиль для блока, который определен в файле style.css, также делает его невидимым с помощью display:none; Нащет ID, это для того, чтобы иметь быстрый доступ к этому блоку и манипулировать ним с помощью jQuery. Этот DIV блок будет содержать информацию о валидации поля.

    Линия 3: Пишем обращение к этому блоку в переменную, так как мы будем использовать его большое количество раз.

    Линия 4: Так же как и в предыдущем случае, мы записываем подключение к полю fullname в переменную. Мы также будем использовать его много раз.

    jQuery функция offset() возвращает текущую позицию элемента по отношению к документу. Возвращается в виде объекта, который содержит свойства top и left. Мы используем эту функцию для ele, чтобы определить позицию поля ввода.

    Теперь допишем еще несколько строк…

    NameInfo.css({ top: pos.top-3, left: pos.left+ele.width()+15 });

    Как видите, мы начинаем оперировать со стилями блока nameInfo. Конкретно, мы устанавливаем его позицию справа от поля ввода. Для этого, мы подымаем на 3 пикселя вверх (2 строка кода), и двигаем на 15 пикселей справа от поля (3 строка кода).

    Мы написали 50% первого метода, доведем дело до конца. Настало время определить, насколько корректно пользователь ввел данные и предпринять меры…

    If(ele.val().length < 6) { jVal.errors = true; nameInfo.removeClass("correct").addClass("error").html("← at least 6 characters").show(); ele.removeClass("normal").addClass("wrong"); } else { nameInfo.removeClass("error").addClass("correct").html("√").show(); ele.removeClass("wrong").addClass("normal"); }

    Выглядит не очень? Бояться нечего…

    Линия 1: Проверяем, чтобы имя введенное пользователем не было менее 6 символов.

    Линия 2: Устанавливаем переменную jVal.errors на true, так как мы определили, что имя пользователя слишком короткое. Мы будем использовать это далее.

    Линия 3: Мы начинаем оперировать нашим nameInfo элементом (в котором выводим информацию). Для начала мы удаляем class correct, и присваиваем class error. Далее мы вставляем контент в nameInfo элемент, это информация о том, что имя должно быть длиннее 6 символов. И наконец то, мы делаем видимым наше сообщение для пользователя.

    Линия 4: Мы начинаем оперировать нашим ele элементом (форма ввода имени пользователя). Удаляем класс normal и присваиваем wrong.

    Линия 5: Если имя пользователя достаточно длинное, тогда…

    Линия 6: Мы начинаем оперировать nameInfo элементом. Если присвоен класс error, удаляем его и присваиваем класс correct. Вставляем внутрь «птичку», чтобы понять что все ОК. И показываем сообщение для пользователя.

    Линия 7: Оперируем ele элементом. Удаляем класс wrong, если он применен, и применяем класс normal.

    Мы создали наш первый метод валидации! Пришло время протестировать его. Мы должны быть уверены, что наш метод вызовется, когда пользователь закончит вводить свое имя. Для реализации этого, нам необходимо прицепить событие к действию. Мы будем использовать функцию change(). Вставьте пример кода ниже, под jVal объектом:

    $("#fullname").change(jVal.fullName);

    Что это значит на человеческом языке: если пользователь изменяет значение поля «Full name» а потом заканчивает с этим, вызывается метод fullName, который проводит валидацию поля.

    Теперь ваш файл validate.js должен содержать следующий код:

    < 6) { jVal.errors = true; nameInfo.removeClass("correct").addClass("error").html("← at least 6 characters").show(); ele.removeClass("normal").addClass("wrong"); } else { nameInfo.removeClass("error").addClass("correct").html("√").show(); ele.removeClass("wrong").addClass("normal"); } } }; // bind jVal.fullName function to "Full name" form field $("#fullname").change(jVal.fullName); });

    Валидация поля даты рождения

    Теперь все пойдет быстрее. Нам просто нужно сделать копию fullName метода и внести некоторые изменения.

    Теперь, скопируйте fullName метод, вставьте его ниже и переименуйте в birthdate. И сделайте следующие изменения:

    • Всюду где встречается nameInfo, замените на birthInfo
    • Вместо #fullname, используйте #birthday для переменной ele
    • Вставьте этот шаблон регулярного выражения ниже выражения birthInfo.css():
    var patt = /^{2}\-{2}\-{4}$/i;
    • Наше прежнее if() выражения должно быть:
    if(!patt.test(ele.val()))
    • Сообщение к этому полю будет следующее: type in date in correct format

    Вот как должен выглядеть birthdate метод, после внесения этих изменений:

    "birthDate" : function (){ $("body").append(""); var birthInfo = $("#birthInfo"); var ele = $("#birthday"); var pos = ele.offset(); birthInfo.css({ top: pos.top-3, left: pos.left+ele.width()+15 }); var patt = /^{2}\-{2}\-{4}$/i; if(!patt.test(ele.val())) { jVal.errors = true; birthInfo.removeClass("correct").addClass("error").html("← type in date in correct format").show(); ele.removeClass("normal").addClass("wrong"); } else { birthInfo.removeClass("error").addClass("correct").html("√").show(); ele.removeClass("wrong").addClass("normal"); } }

    С помощью регулярного выражения (14 строка), мы проверяем, чтобы дата была в формате 28-03-1987. В 16 строке, мы проверяем соответствие даты рождения пользователя с шаблоном регулярного выражения.

    И конечно же, нам нужно прикрепить событие change() для поля даты рождения:

    $("#birthday").change(jVal.birthDate);

    Теперь мы имеем еще один работающий метод валидации формы на jQuery. Отличная работа!

    Валидация поля стать

    Опять скопируйте метод fullName, переименуйте его в gender и внесите следующие изменения:

    • Все nameInfo переименуйте в genderInfo
    • Вместо #fullname, примените #woman для переменной ele
    • В выражении genderInfo.css(), переменную top измените на top: pos.top-10, и left на left: pos.left+ele.width()+60
    • Наше выражение if() должно быть:
    if($("input:checked").length === 0)
    • Сообщение пользователю будет: are you a man or a woman?

    Вот как должен выглядеть метод gender, после изменений:

    "gender" : function (){ $("body").append(""); var genderInfo = $("#genderInfo"); var ele = $("#woman"); var pos = ele.offset(); genderInfo.css({ top: pos.top-10, left: pos.left+ele.width()+60 }); if($("input:checked").length === 0) { jVal.errors = true; genderInfo.removeClass("correct").addClass("error").html("← are you a man or a woman?").show(); ele.removeClass("normal").addClass("wrong"); } else { genderInfo..removeClass("error").addClass("correct").html("√").show(); ele.removeClass("wrong").addClass("normal"); } }

    В строке 14 мы проверяем сколько выбрано селекторов radio. Если 0, то пользователь ничего не выбрал, выводим сообщение об ошибке.

    И как всегда, прикрепляем gender метод для radio кнопок:

    $("input").change(jVal.gender);

    Валидация checkers - владение транспортом

    Теперь скопируем gender методи и переименуем его в vehicle, внесем следующие изменения:

    • Все genderInfo замените на vehicleInfo
    • Вместо #woman, впишите #ship для ele.
    • В vehicleInfo.css() выражении, значение left должно быть left: pos.left+ele.width()+40
    • Наше выражение if() должно теперь быть:
    if($("input:checked").length

    © 2024 beasthackerz.ru - Браузеры. Аудио. Жесткий диск. Программы. Локальная сеть. Windows