Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #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.
Ответить с цитированием
  #2 (permalink)  
Старый 31.05.2014, 11:05
Аватар для cyber
I am Student
Отправить личное сообщение для cyber Посмотреть профиль Найти все сообщения от cyber
 
Регистрация: 17.12.2011
Сообщений: 4,415

javascript_validation, тэг script в помощь
__________________
Цитата:
Если ограничения и условия описываются как "коробка", то хитрость в том что бы найти именно коробку... Не думайте о чем то глобальном - найдите коробку.
Ответить с цитированием
  #3 (permalink)  
Старый 02.06.2014, 10:33
Новичок на форуме
Отправить личное сообщение для javascript_validation Посмотреть профиль Найти все сообщения от javascript_validation
 
Регистрация: 30.05.2014
Сообщений: 3

Я так полагаю, мой вопрос неадекватен? Извините если не так понял.
(Cyber - Помогаю только с адекватными или интересными вопросами.)
Ответить с цитированием
  #4 (permalink)  
Старый 02.06.2014, 10:50
Аватар для рони
Профессор
Отправить личное сообщение для рони Посмотреть профиль Найти все сообщения от рони
 
Регистрация: 27.05.2010
Сообщений: 33,103

javascript_validation,
оформите ваш код с помощью кнопочки
иначе плохо читается и лучше сделать макет
тут или в песочнице чтоб видно было что затирается у вас.

Последний раз редактировалось рони, 02.06.2014 в 14:05.
Ответить с цитированием
  #5 (permalink)  
Старый 02.06.2014, 10:51
Аватар для рони
Профессор
Отправить личное сообщение для рони Посмотреть профиль Найти все сообщения от рони
 
Регистрация: 27.05.2010
Сообщений: 33,103

javascript_validation,
Пожалуйста, отформатируйте свой код!

Для этого его можно заключить в специальные теги: js/css/html и т.п., например:
[js]
... ваш код...
[/js]


О том, как вставить в сообщение исполняемый javascript и html-код, а также о дополнительных возможностях форматирования - читайте http://javascript.ru/formatting.
Ответить с цитированием
  #6 (permalink)  
Старый 02.06.2014, 14:01
Аватар для cyber
I am Student
Отправить личное сообщение для cyber Посмотреть профиль Найти все сообщения от cyber
 
Регистрация: 17.12.2011
Сообщений: 4,415

Сообщение от javascript_validation
(Cyber - Помогаю только с адекватными или интересными вопросами.)
это подпись.
__________________
Цитата:
Если ограничения и условия описываются как "коробка", то хитрость в том что бы найти именно коробку... Не думайте о чем то глобальном - найдите коробку.
Ответить с цитированием
  #7 (permalink)  
Старый 02.06.2014, 18:00
Аватар для nice_try
Профессор
Отправить личное сообщение для nice_try Посмотреть профиль Найти все сообщения от nice_try
 
Регистрация: 11.12.2013
Сообщений: 313

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

Всем спасибо, с проблемой разобрался - цикл установки события submit.
Извините за оформление (не хотел оформлять через js-/js) спасибо за помощь!

Сообщение от nice_try Посмотреть сообщение
если ты хочешь написать нормальный модуль валидации, то используй паттерн компоновщик
Cyber - не хотел обидеть, просто не так понял подпись

Последний раз редактировалось javascript_validation, 03.06.2014 в 09:25.
Ответить с цитированием
  #9 (permalink)  
Старый 04.06.2014, 17:54
Аватар для cyber
I am Student
Отправить личное сообщение для cyber Посмотреть профиль Найти все сообщения от cyber
 
Регистрация: 17.12.2011
Сообщений: 4,415

Сообщение от javascript_validation
не хотел оформлять через js-/js
почему?
Просто, код в таком виде как вы выложили читать не удобно, и шансов что кто то его будет читать очень мало ( это так, на будущее )
__________________
Цитата:
Если ограничения и условия описываются как "коробка", то хитрость в том что бы найти именно коробку... Не думайте о чем то глобальном - найдите коробку.
Ответить с цитированием
Ответ



Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Модуль для joomla cyber Оффтопик 1 19.05.2014 20:04
Как включить при валидации jquery.validation отправку координат клика по input=image Error-free jQuery 7 26.06.2012 20:14
И снова о валидации (remote в jQuery.validation v1.7) Sufir jQuery 0 02.03.2011 13:50
Модуль для работы с модулями JSprog Ваши сайты и скрипты 29 02.09.2009 13:31