Шаг 236.
Библиотека jQuery. Использование модулей расширения. Библиотека расширений jQuery UI. Формы. Виджет Validation

    На этом шаге мы рассмотрим пример использования этого виджета.

    Материал этого шага базируется на 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({
  // список опций
});
который может принимать просто огромное количество опций (набор пар ключ/значение) и в соответствии с ними выполнять проверку выбранной формы. Метод validate устанавливает обработчики событий для submit, focus, keyup, blur и click, чтобы переключиться в проверку всей формы или ее отдельных полей.

    Приведем наиболее востребованные опции с пояснениями:

    На следующем шаге мы рассмотрим методы этого виджета.




Предыдущий шаг Содержание Следующий шаг