Привет всем обитателям форума!
Выставляю вам на обозрение и критику код своего недоделанного модуля, отвечающего за валидацию форм на странице сайта. Код ниже.
Лень матушка толкнула меня на это, идея была следующей:
Чтобы не писать для каждой формы на сайте код проверки правильности заполнения полей, я решил сделать отдельный модуль который проверял бы количество всех форм на сайте, после чего устанавливал бы обработчик события submit на форме и валидация проводилась бы для всех форм динамично. Далее планировалось что по результатам валидации будут
выводиться сообщения. Ну и много всяких прваок и дополнений типа добавления к каждой форме индивидуальных функций отправки данных и т.п.
Поначалу все складывалось как никогда кстати, но потом появились ошибки - а именно стало затираться значение поля формы на true из-за чего перестали выполняться последние строчки кода (switch).
Вообщем вопрос вот в чем - следует ли дальше ломать голову над этим кодом пытаясь понять причину проблемы и доработать все до рабочего состояния или же проще просто взять и написать код валидации для каждой формы по отдельности?
Буду очень благодарен каждому откликнувшемуся на эту тему. Спасибо.
Код:
|
$(document).ready(function(){
//Запуск инициализатора проверки
initializer();
});
/** Массив форм сайта */
var SiteForms = new Array("call_order", "search_site");
/** Массив форм страницы */
var PageForms = new Array();
/** Объект правил формы */
var FormRules = {
call_order: {
client_name: {
required: true,
pattern: "[А-Яа-яA-Za-zЁё\\-]{2,}",
minlength: 2
},
client_telephone: {
required: false,
pattern: "([\\+7]|8)-?[0-9]{3}-?[0-9]{3}-?[0-9]{2}-?[0-9]{2}",
maxlength: 14
}
}
}
/** Объект ошибок формы */
var Errors = {};
/** Массив сообщений об ошибках */
var ErrorMessages = new Array();
/** Инициализатор проверки */
function initializer(){
//Сохранение всех форм страницы
var forms_of_document = document.forms;
alert(forms_of_document.length);
//Если количество форм этой страницы больше нуля, записать все элементы в массив PageForms
if(forms_of_document.length != 0)
{
for (var i=0; i<forms_of_document.length; i++)
{
//Сохранение объекта формы
var form = forms_of_document[i];
//Если форма существует в массиве SiteForms, записать форму в массив PageForms
if(form.name == SiteForms[i])
{
//Добавление формы в массив PageForms
PageForms[i] = form.name;
alert("Succeful! - "+PageForms[i]);
}
}
for(var count=0; count<PageForms.length; count++)
{
alert(PageForms[count]);
//Установка слушателя событий отправки формы
$("#"+PageForms[count]+"").submit(function(e){
e.preventDefault();
alert("Click on "+ this.name);
//Сохранение данных формы
var form_data = $(this).serializeArray();
//Проверка формы
validate_form(this.name, form_data);
//Если валидация прошла успешно
/* if(result == true)
{
//AJAX код здесь
}*/
});
}
}
}
/** Валидация формы
* параметры: имя формы - form_name, массив данных - form_data
*/
function validate_form(form_name, form_data)
{
//alert(form_name);
//alert(form_data.length);
for(var index=0; index<form_data.length; index++)
{
//alert(form_data[index].name);
//Сохранение имени и значения поля для валидации
var input_name = form_data[index].name;
//alert(form_data[index].value);
var input_value = form_data[index].value;
//Валидация значения поля
validate_input(form_name, input_name, input_value);
}
}
/** Проверка правил поля */
function validate_input(form_name, input_name, input_value){
//Проверка поля на принадлежность к массиву и последующий перебор всех элементов массива FormRules (всех правил)
for(var input in FormRules[form_name])
{
alert(input);
alert(input_value);
if(input_name == input)
{
//Запуск механизма валидации значения поля
for(var rule in FormRules[form_name][input])
{
//Сохранение значение правила
var rule_value = FormRules[form_name][input][rule];
alert(rule);
alert(rule_value);
switch (rule)
{
case "required": if(rule_value == true && input_value == "")
{
alert("This Required!");
error_register(form_name, input_name);
}
break;
case "pattern": if(rule_value != false && !(input_value = new RegExp(rule_value, "i").test(input_value)))
{
alert("Done!");
error_register(form_name, input_name);
}
break;
case "minlength": alert(input_value); if(input_value.length < rule_value)
{
alert("This Minlength");
error_register(form_name, input_name);
}
break;
case "maxlength": if(input_value.length > rule_value)
{
alert("This Maxlength");
error_register(form_name, input_name);
}
break;
}
}
}
}
}
/** Регистратор ошибок поля
* параметры: имя формы - form_name, имя поля - input_name */
function error_register(form_name, input_name){
alert("Function calling!");
Errors[input_name] = {}
} |