Вызов функции
Добрый день, я новенький программист, раньше писал на С++, в WEB программировании олух.
Есть вот такие вот вещи на Prototype (я так думаю) Есть 2 формы которые проходят валидацию через функцию OrderFormValidator () функция работает 100% правильно. вот кусок кода function OrderFormValidator() { this.Run(); } OrderFormValidator.prototype = { validator: SubmitValidator(), Run: function () { this.validator = new SubmitValidator(); this.validator.SetSubValidator(this); this.DoAddElems(); this.DoPrepareHiddenElems(); this.DoValidate(); }, AddElem: function (a, b) { this.validator.AddElem(a, b); }, DoAddElems: function () { this.validator.SetSubmiterName("orderFormSubmiter"); this.validator.AddElem("name", "input"); this.validator.AddElem("phone", "input"); }, DoPrepareHiddenElems: function () { var a = (window.location.hash.toString() == "#order"); if (a) { $("#name").focus(); } }, DoValidate: function () { var c = this.validator.IsNotEmptyInput("name"); var a = this.validator.IsNotEmptyInput("phone"); this.validator.DoChangeErrorClass("name", c); this.validator.DoChangeErrorClass("phone", a); var b = (c && a); this.validator.DoChangeSubmitActive(b); } }; и точка входа $(document).ready(function () { if ($("#orderFormSubmiter").length) { new OrderFormValidator(); } }); но у меня 2 формы с ID orderFormSubmiter на 1 странице и валидация проходит только для 1 формы а для 2 никак не хочется, пробывал через each() но ничего не получилось, нужно вызывать OrderFormValidator() для каждой формы по отдельности но это не получается и он вызывает только для 1 формы или я что-то не так понимаю, я новенький надеюсь на вашу помощь. |
Цитата:
|
А зачем делать обход по id, сделайте обход по form и всё, если уж id никак не поменять.
|
Ребят спасибо, помогло, валидация проходит но следующая беда
функция DoValidate: function () { var c = this.validator.IsNotEmptyInput("name"); var a = this.validator.IsNotEmptyInput("phone"); this.validator.DoChangeErrorClass("name", c); this.validator.DoChangeErrorClass("phone", a); var b = (c && a); this.validator.DoChangeSubmitActive(b); } исполняется только для 1 формы, она добавляет для полей name и phone класс error который выделяет красным. В обоих формах есть такие поля, формы впринципе только 1 полем отличаются, но его не нужно проверять, как мне передать в DoValidate: function () обе формы, а то он через this обращается только к первой форме я так понимаю, у каждой формы уникальный ID |
есть возможность поставить второй форме #orderFormSubmiter2 ?
|
да есть, но вообще #orderFormSubmiter висит на кнопке которая после отправляет ajax запрос, но я думаю это тут не важно.
|
добавь тогда объект для второй формы, аналогично первой
$(document).ready(function () { if ($("#orderFormSubmiter").length) { new OrderFormValidator(); } if ($("#orderFormSubmiter2").length) { new OrderFormValidator(); } }); |
Вот самое интересное что это и не работает=) я уже так пробывал....
в этой строчке проблема когда я так делаю... (видимо) как я думаю this.validator.SetSubmiterName("orderFormSubmiter" ); |
тогда сделайте классами, поставьте обеим формам class="orderFormSubmiter" и
$(document).ready(function () { if ($(".orderFormSubmiter").length) { new OrderFormValidator(); } }); |
Так же не хочет работать
Весь код привожу что у меня есть function SubmitValidatorFuncs() {} SubmitValidatorFuncs.prototype = { submiterName: "", submiterDisabledClassName: "submiterDisabled", subValidator: Object(), SetSubmiterDisabeldClassName: function (a) { this.submiterDisabledClassName = a; }, AddElem: function (a, b) { a = "#" + a; this.BindElem(a, b); }, AddElemClass: function (a, b) { this.BindElem(a, b); }, BindElem: function (a, c) { var b = this; if ((c == "input") || (c == "textarea")) { $(a).bind("click focus keyup paste blur", function () { b.subValidator.DoValidate(); }); } else { if ((c == "checkbox") || (c == "radio") || (c == "button")) { $(a).bind("click", function () { b.subValidator.DoValidate(); }); } else { if (c == "select") { $(a).bind("change", function () { b.subValidator.DoValidate(); }); } } } }, IsChecked: function (a) { a = "#" + a; return ($(a).attr("checked") == true); }, IsNotChecked: function (a) { return !this.IsChecked(a); }, IsEmptyInput: function (a) { a = "#" + a; return ($(a).attr("value") == ""); }, IsNotEmptyInput: function (a) { return !this.IsEmptyInput(a); }, IsEmptyTextarea: function (a) { a = "#" + a; return ($(a).val() == ""); }, IsNotEmptyTextarea: function (a) { return !this.IsEmptyTextarea(a); }, IsSelectedZero: function (a) { a = "#" + a; return ($(a).val() == 0); }, IsNotSelectedZero: function (a) { return !this.IsSelectedZero(a); }, IsPositive: function (a) { a = "#" + a; return ($(a).val() > 0); }, IsSelectedNatural: function (a) { a = "#" + a; return ($(a).val() >= 0); }, IsDateValid: function (c, b) { c = "#" + c; var a = $(c).attr("value"); if (b == "dd.mm.yyyy") { var f = new RegExp("^[0-3]{1}[0-9]{1}.[0-1]{1}[0-9]{1}.[0-9]{4}$"); var d = a.match(f); if (d != null) { return true; } else { return false; } } else { if (b == "hh:mm") { var g = new RegExp("^[0-2]{1}[0-9]{1}:[0-6]{1}[0-9]{1}$"); var d = a.match(g); if (d != null) { return true; } else { return false; } } else { return false; } } }, IsEmailValid: function (c) { c = "#" + c; var b = $(c).attr("value"); var a = new RegExp("^[^@]+@[^@.]+[.]{1}[^@.]{2,}$"); var d = b.match(a); if (d == null) { return false; } else { return true; } }, SetSubmiterName: function (a) { this.submiterName = a; }, SetSubValidator: function (a) { this.subValidator = a; }, DoChangeSubmitActive: function (b) { var a = "#" + this.submiterName; if (b) { $(a).removeClass(this.submiterDisabledClassName); $(a).removeAttr("disabled"); } else { $(a).addClass(this.submiterDisabledClassName); $(a).attr("disabled", "disabled"); } }, DoChangeErrorClass: function (b, a) { var c = "#" + b + "Title"; if (a) { $(c).removeClass("error"); } else { $(c).addClass("error"); } } }; function SubmitValidator() { var a = new SubmitValidatorFuncs(); return { SetSubmiterName: function (b) { a.SetSubmiterName(b); }, SetSubValidator: function (b) { a.SetSubValidator(b); }, AddElem: function (b, c) { a.AddElem(b, c); }, AddElemClass: function (b, c) { a.AddElemClass(b, c); }, IsChecked: function (b) { return a.IsChecked(b); }, IsNotChecked: function (b) { return a.IsNotChecked(b); }, IsEmptyInput: function (b) { return a.IsEmptyInput(b); }, IsNotEmptyInput: function (b) { return a.IsNotEmptyInput(b); }, IsEmptyInputTextarea: function (b) { return a.IsEmptyInputTextarea(b); }, IsNotEmptyTextarea: function (b) { return a.IsNotEmptyTextarea(b); }, IsSelectedZero: function (b) { return a.IsSelectedZero(b); }, IsNotSelectedZero: function (b) { return a.IsNotSelectedZero(b); }, IsSelectedNatural: function (b) { return a.IsSelectedNatural(b); }, IsPositive: function (b) { return a.IsPositive(b); }, IsDateValid: function (c, b) { return a.IsDateValid(c, b); }, DoChangeSubmitActive: function (b) { a.DoChangeSubmitActive(b); }, IsEmailValid: function (b) { return a.IsEmailValid(b); }, SetSubmiterDisabeldClassName: function (b) { a.submiterDisabledClassName = b; }, DoChangeErrorClass: function (c, b) { a.DoChangeErrorClass(c, b); } }; } function OrderFormValidator() { this.Run(); } OrderFormValidator.prototype = { validator: SubmitValidator(), Run: function () { this.validator = new SubmitValidator(); this.validator.SetSubValidator(this); this.DoAddElems(); this.DoPrepareHiddenElems(); this.DoValidate(); }, AddElem: function (a, b) { this.validator.AddElem(a, b); }, DoAddElems: function () { this.validator.SetSubmiterName("orderFormSubmiter"); this.validator.AddElem("name", "input"); this.validator.AddElem("phone", "input"); }, DoPrepareHiddenElems: function () { var a = (window.location.hash.toString() == "#order"); if (a) { $("#name").focus(); } }, DoValidate: function () { var c = this.validator.IsNotEmptyInput("name"); var a = this.validator.IsNotEmptyInput("phone"); this.validator.DoChangeErrorClass("name", c); this.validator.DoChangeErrorClass("phone", a); var b = (c && a); this.validator.DoChangeSubmitActive(b); } }; $(document).ready(function () { if ($("#orderFormSubmiter").length) { new OrderFormValidator(); } }); |
Часовой пояс GMT +3, время: 21:49. |