[Из песочницы] Удобная работа с Jquery Validation через атрибуты class
Недавно начал разрабатывать одно приложение на Zend Framework. И столкнулся с одной проблемой. Данная проблема известна многим (если не всем) web программистам. А называется она «Валидация форм на клиенте».
В моем проекте используется jQuery фреймворк. В нем имеется плагин для валидации форм jQuery Validation
Но в нем мне не понравился тот факт, что для каждого элемента формы нужно описывать правила валидации, а это очень много лишнего текста. Особенно если у меня много форм. Люди знакомые с ним поймут меня. И я подумал, а что если привязать эти правила к атрибутам class элементов формы. Ведь когда создаешь формы с использованием Zend Form, подключение валидации намного удобнее делать именно так. В итоге я написал небольшую библиотеку. Скорее даже дополнение к библиотеке, которое позволяет сделать такое подключение валидатора. Вообще следя за тенденциями развития html 5, можно сказать, что в будущем эта библиотека будет нужна только для нестандартной валидации. Но пока еще не наступили те прекрасные времена, так что я продолжу.
Необходимые вещи для данного злодейства:
Для включения этой библиотеки достаточно сделать следующее:
$(document).ready(function(){
$(document).connectValidator();
});
Работает эта штука следующим образом. После загрузки страницы запускается метод connectValidator, с селектором на объект где находятся формы, которые мы хотим проверять. В моем случае это $(document).
Метод просматривает все формы в блоке и находит нужные классы.
Названия классов для связки с методами из jQuery Validation можно изменять в настройках. Также можно задать префикс для всех названий. Вот список названий классов из стандартных настроек.
| Метод из библиотеки | Имя класса в дополнении |
|---|---|
| required: true | class=«required» |
| email: true | class=«email» |
| url: true | class=«url» |
| date: true | class=«date» |
| dateISO: true | class=«dateISO» |
| number: true | class=«number» |
| digits: true | class=«digits» |
| creditcard: true | class=«creditcard» |
Так же библиотека понимает и вот эти значения:
| Метод из библиотеки | Имя класса в дополнении |
|---|---|
| minlength: 3 | minlength=«3» |
| maxlength: 4 | maxlength=«4» |
| min: 13 | min=«13» |
| max: 23 | max=«23» |
| range: [13, 23] | min=«13» max=«23» |
| rangelength: [2, 6] | minlength=«2» maxlength=«6» |
Помимо простых проверок, можно использовать составные.
На сегодняшний день поддерживаются следующие методы.
| Метод из библиотеки | Имя класса в дополнении |
|---|---|
| equalTo: "# id-field" | class=«equalTo» data-equalTo=" id-field " |
| extension: «xls|csv» | class=«extension» data-extension = '{«types»:[«xls»,«csv»]}' |
| remote: {url: 'remote_script.php',data: {...}} | class=«remote» data-remote = '{«url»:«remote_script.php»,«data»:[«id1»,«id2»,«id3»]}' |
Ну вот и все, что сейчас поддерживает эта штука.
Так же в настройках можно задать настройки для jQuery Validation. Эти настройки просто записываются в customConfigValidator.
По умолчанию это:
customConfigValidator:{
debug: true,
submitHandler: function(form) {
form.submit();
}
}
В моем же случае все намного страшнее. Помимо этих библиотек я еще использую jQuery Form Plugin. И моя настройка выглядит следующим образом:
var formResponse = '';
$(document).ready(function()
{
var options = {
customConfigAjax:{
beforeSubmit: function(arr, $form, options) {
preload_open();
// тут можно подумать о переработке данных
},
success: function(response) {
formResponse=response;
preload_close();
reactionOnSubmit();
},
error:function() {
preload_close();
alert('Unknown error');
}
},
customConfigValidator:{
submitHandler: function(form) {
if ($(form).hasClass("AjaxForm"))
{
$(form).ajaxSubmit(options.customConfigAjax);
}
else{
form.submit();
}
},
invalidHandler: function(form, validator) {
var errors = validator.numberOfInvalids();
}
}
};
$(document).connectValidator(options);
function reactionOnSubmit()
{
alert(formResponse)
}
});
Как видно из настроек, если форма валидна идет проверка на наличие у формы класса AjaxForm. Если класс найден, то идет Ajax отправка формы.
Если же класс не найден то следует обычная отправка.
Также в настройках для connectValidator можно писать настройки для любых других библиотек. Как например настройка customConfigAjax.
Вот вроде и все что я хотел рассказать. Если есть пожелания или советы, то я с удовольствием выслушаю их.
Спасибо за внимание.
Полезные ссылки
