Показать сообщение отдельно
  #1 (permalink)  
Старый 30.05.2014, 16:46
Новичок на форуме
Отправить личное сообщение для javascript_validation Посмотреть профиль Найти все сообщения от javascript_validation
 
Регистрация: 30.05.2014
Сообщений: 3

Модуль валидации
Привет всем обитателям форума!

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

Лень матушка толкнула меня на это, идея была следующей:
Чтобы не писать для каждой формы на сайте код проверки правильности заполнения полей, я решил сделать отдельный модуль который проверял бы количество всех форм на сайте, после чего устанавливал бы обработчик события 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] = {}
}

Последний раз редактировалось javascript_validation, 30.05.2014 в 19:59.
Ответить с цитированием