На этом шаге мы рассмотрим пример использования этого виджета.
Материал этого шага базируется на http://2develop.ru/jquery/proverka-poley-s-pomoshtyyu-jquery.html и http://www.linkexchanger.su/2008/46.html#more-46.
Еще одно расширение Йерна Зафферера (Jorn Zaefferer), Validation, представляет собой чрезвычайно гибкий инструмент проверки содержимого полей ввода формы на основе разнообразных критериев.
Адреса, где можно взять компонент: http://archive.plugins.jquery.com/project/validate/ или http://bassistance.de/jquery-plugins/jquery-plugin-validation/.
Как обычно, сначала потребуется подключить библиотеку jQuery (jQuery Validation работает с версией 1.2.2 и выше). Понятно, что понадобится и jquery.form.js, и собственно query.validate.js – все это подключаем в разделе HEAD нужной страницы. Можно подключить и файл additional-methods.js, содержащий, как ясно из названия, дополнительные методы.
<script src="js/jquery-1.9.0.js" type="text/javascript"></script> <script src="js/jquery.validate.min.js" type="text/javascript"></script> <script src="js/jquery.form.js" type="text/javascript"></script> <script src="js/additional-methods.js" type="text/javascript"></script>
Стилевые таблицы и HTML-код сможно посмотреть ниже.
. . . . <style type="text/css"> * { margin:0; padding:0; } html, body { background-color:#FFF; font-family: "Trebuchet MS", Tahoma, Verdana, Arial, Helvetica, sans-serif; font-size: 10pt; } form { margin-left:25px; } input, textarea, select { display:block; width:250px; float:left; margin-left:10px; margin-bottom:15px; font-family: "Trebuchet MS", Tahoma, Verdana, Arial, Helvetica, sans-serif; font-size: 10pt; } textarea { height:50px; } label { position:relative; display:block; text-align:right; float:left; width:105px; padding-right:5px; } label em { position:absolute; right:-260px; top:-15px; font-size:.8em; color: #f00; padding: 1px; } br { clear:left; } .cb, .rb { width:1em; } #reset, #submit { width:87px; margin-left:60px; margin-top:10px; } #output { background-color:#F0B80D; height:25px; overflow:hidden; padding:5px; margin-bottom:15px; } </style> . . . . </head> <body> <div id="output">Регистрационная форма.</div> <form id="myForm" action="" method="post"> <label for="Name">Имя: (*)<em></em></label> <input id="Name" name="Name" type="text" value="" /><br /> <label for="Email">E-mail: (*)<em></em></label> <input id="Email" name="Email" type="text" value="" /><br /> <label for="Url">URL:<em></em></label> <input id="Url" name="Url" type="text" value="" /><br /> <label for="Colors">Select: (*)<em></em></label> <select id="Colors" name="Colors"> <option value=""></option> <option value="red">Красный</option> <option value="orange">Оранжевый</option> <option value="yellow">Желтый</option> <option value="green">Зеленый</option> <option value="blue">Голубой</option> <option value="deepblue">Синий</option> <option value="violet">Фиолетовый</option> </select><br /> <label for="Text">Textarea: (*)<em></em></label> <textarea id="Text" name="Text" rows="1" cols="20"></textarea><br /> <label for="Password">Пароль: (*)<em></em></label> <input id="Password" name="Password" type="password" /><br /> <label for="ConfirmPassword">Еще раз: (*)<em></em></label> <input id="ConfirmPassword" name="ConfirmPassword" type="password" /><br /> <label for="Avatar">Файл:<em></em></label> <input id="Avatar" name="Avatar" type="file" /><br /> <label for="Agree">Чекбокс (*)<em></em></label> <input class="cb" id="Agree" name="Agree" type="checkbox" /><br /> <label for="Radio">Радио: (*)<em></em></label> <input class="rb" type="radio" name="Radio" value="1" /> <input class="rb" type="radio" name="Radio" value="2" /> <input class="rb" type="radio" name="Radio" value="3" /><br /> <label for="Examine">6 + 7 = (*)<em></em></label> <input id="Examine" name="Examine" type="text" value="" /><br /> <input id="reset" type="reset" name="resetButton" value="Reset" /> <input id="submit" type="submit" name="submitButton" value="Submit" /> </form> . . . .
Отметим, что стоит следовать следующим рекомендациям по разметке.
Каждый элемент input или select имеет «свой» элемент label с атрибутом for, значение которого одинаково со значением атрибута id соответствующего элемента input или select:
<label for="Name">Имя: (*)<em></em></label> <input id="Name" name="Name" type="text" value="" /><br />
Теперь приведем JavaScript-код:
$(document).ready(function(){
$("#myForm").validate({
focusInvalid: false,
focusCleanup: true,
rules: {
Name: {
required: true,
minlength: 2,
maxlength: 12
},
Email: {
required: true,
email: true
},
Text: {
required: true,
maxlength: 24
},
Password: {
required: true,
rangelength: [6, 24]
},
ConfirmPassword: {
required: true,
rangelength: [6, 24],
equalTo: "#Password"
},
Agree: "required",
Url: {
url: true
},
Radio: "required",
Avatar: {
accept: "jpg|gif|png"
},
Colors: {
required: true
},
Examine: {
required: true,
equal: 13
}
},
messages: {
Name: {
required: "Укажите свое имя, пожалуйста!",
minlength: "Не менее 2 символов",
maxlength: "Не более 12 символов"
},
Email: {
required: "Нужно указать email адрес",
email: "Email адрес должен быть корректным"
},
Text: {
required: "Напишите сообщение, пожалуйста!",
maxlength: "Не более 24 символов"
},
Password: {
required: "Укажите пароль!",
rangelength: "Пароль - от 6 до 24 символов"
},
ConfirmPassword: {
required: "Подтвердите пароль!",
rangelength: "Пароль - от 6 до 24 символов",
equalTo: "Подтверждение пароля не принято!"
},
Agree: "Соглашайтесь или уходите!",
Url: {
url: "Введите корректный URL"
},
Radio: "Нужно сделать выбор...",
Avatar: {
accept: "jpg, gif или png"
},
Colors: {
required: "Выбирайте цвет"
},
Examine: {
required: "Надо решить этот пример!",
equal: "Вы в школе учились?"
}
},
errorPlacement: function(error, element) {
var er = element.attr("name");
error.appendTo( element.parent()
.find("label[for='" + er + "']").find("em") );
}
});
// ---- Форма -----
});
Вот внешний вид формы:
Рис.1. Результат работы скрипта
В этом коде самое интересное для нас это, пожалуй, основной метод – validate,
$("#myForm").validate({
// список опций
});
Приведем наиболее востребованные опции с пояснениями:
$("#myform").validate({ ignore: ".ignore" });
$(".selector").validate({ rules: { // поле name - обязательное name: "required", // для поля email email: { // заполнение обязательно required: true, // значение должно быть корректным email: true } } });
$(".selector").validate({ rules: { name: "required", email: { required: true, email: true } }, messages: { // если не заполнено поле name // пользователь увидит сообщение name: "Пожалуйста, представьтесь!", email: { // если не заполнено поле email // пользователь увидит сообщение required: "Нужно указать e-mail!", // если поле email некорректно // пользователь увидит сообщение email: "E-mail должен быть корректным!" } } });
errorPlacement: function(error, element) { var er = element.attr("name"); error.appendTo( element.parent() .find("label[for="" + er + ""]") .find("em") ); }
В переменную er получаем значение атрибута name элемента, в котором обнаружена ошибка. Сообщение об ошибке добавляем в целевой элемент, который еще надо найти. Находим «родителя» этого элемента, в нем обнаруживаем элемент label с атрибутом for, который имеет значение точно такое же, которое у нас уже хранится в переменной er (помните рекомендации по разметке?), находим в нем целевой элемент em. Вот туда и будет вставлен текст сообщения об ошибке.
На следующем шаге мы рассмотрим методы этого виджета.