30.05.2014, 16:46
|
Новичок на форуме
|
|
Регистрация: 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.
|
|
31.05.2014, 11:05
|
|
I am Student
|
|
Регистрация: 17.12.2011
Сообщений: 4,415
|
|
javascript_validation, тэг script в помощь
__________________
Цитата:
|
Если ограничения и условия описываются как "коробка", то хитрость в том что бы найти именно коробку... Не думайте о чем то глобальном - найдите коробку.
|
|
|
02.06.2014, 10:33
|
Новичок на форуме
|
|
Регистрация: 30.05.2014
Сообщений: 3
|
|
Я так полагаю, мой вопрос неадекватен? Извините если не так понял.
(Cyber - Помогаю только с адекватными или интересными вопросами.)
|
|
02.06.2014, 10:50
|
|
Профессор
|
|
Регистрация: 27.05.2010
Сообщений: 33,103
|
|
javascript_validation,
оформите ваш код с помощью кнопочки
иначе плохо читается и лучше сделать макет
тут или в песочнице чтоб видно было что затирается у вас.
Последний раз редактировалось рони, 02.06.2014 в 14:05.
|
|
02.06.2014, 10:51
|
|
Профессор
|
|
Регистрация: 27.05.2010
Сообщений: 33,103
|
|
javascript_validation,
Пожалуйста, отформатируйте свой код!
Для этого его можно заключить в специальные теги: js/css/html и т.п., например:
[js]
... ваш код...
[/js]
О том, как вставить в сообщение исполняемый javascript и html-код, а также о дополнительных возможностях форматирования - читайте http://javascript.ru/formatting.
|
|
02.06.2014, 14:01
|
|
I am Student
|
|
Регистрация: 17.12.2011
Сообщений: 4,415
|
|
Сообщение от javascript_validation
|
(Cyber - Помогаю только с адекватными или интересными вопросами.)
|
это подпись.
__________________
Цитата:
|
Если ограничения и условия описываются как "коробка", то хитрость в том что бы найти именно коробку... Не думайте о чем то глобальном - найдите коробку.
|
|
|
02.06.2014, 18:00
|
|
Профессор
|
|
Регистрация: 11.12.2013
Сообщений: 313
|
|
если ты хочешь написать нормальный модуль валидации, то используй паттерн компоновщик
|
|
03.06.2014, 09:02
|
Новичок на форуме
|
|
Регистрация: 30.05.2014
Сообщений: 3
|
|
Всем спасибо, с проблемой разобрался - цикл установки события submit.
Извините за оформление (не хотел оформлять через js-/js) спасибо за помощь!
Сообщение от nice_try
|
если ты хочешь написать нормальный модуль валидации, то используй паттерн компоновщик
|
Cyber - не хотел обидеть, просто не так понял подпись
Последний раз редактировалось javascript_validation, 03.06.2014 в 09:25.
|
|
04.06.2014, 17:54
|
|
I am Student
|
|
Регистрация: 17.12.2011
Сообщений: 4,415
|
|
Сообщение от javascript_validation
|
не хотел оформлять через js-/js
|
почему?
Просто, код в таком виде как вы выложили читать не удобно, и шансов что кто то его будет читать очень мало ( это так, на будущее )
__________________
Цитата:
|
Если ограничения и условия описываются как "коробка", то хитрость в том что бы найти именно коробку... Не думайте о чем то глобальном - найдите коробку.
|
|
|
|
|