10.04.2013, 17:27
|
Аспирант
|
|
Регистрация: 17.07.2012
Сообщений: 34
|
|
Вызов функции
Добрый день, я новенький программист, раньше писал на С++, в 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 формы или я что-то не так понимаю, я новенький надеюсь на вашу помощь.
|
|
11.04.2013, 01:50
|
|
Профессор
|
|
Регистрация: 11.09.2010
Сообщений: 8,804
|
|
Сообщение от Hol1killer
|
но у меня 2 формы с ID orderFormSubmiter на 1 странице
|
А в C++ разве можно создавать два и более контрола скажем с одним Name ? Коллизий не будет? Вот тут с id примерно также. Id должен быть уникальный. В остальных случаях есть class, name и прочие атрибуты.
|
|
11.04.2013, 09:32
|
|
.
|
|
Регистрация: 30.03.2010
Сообщений: 1,813
|
|
А зачем делать обход по id, сделайте обход по form и всё, если уж id никак не поменять.
__________________
.
|
|
11.04.2013, 11:42
|
Аспирант
|
|
Регистрация: 17.07.2012
Сообщений: 34
|
|
Ребят спасибо, помогло, валидация проходит но следующая беда
функция
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
|
|
11.04.2013, 11:59
|
|
Профессор
|
|
Регистрация: 17.01.2013
Сообщений: 887
|
|
есть возможность поставить второй форме #orderFormSubmiter2 ?
|
|
11.04.2013, 12:12
|
Аспирант
|
|
Регистрация: 17.07.2012
Сообщений: 34
|
|
да есть, но вообще #orderFormSubmiter висит на кнопке которая после отправляет ajax запрос, но я думаю это тут не важно.
|
|
11.04.2013, 12:19
|
|
Профессор
|
|
Регистрация: 17.01.2013
Сообщений: 887
|
|
добавь тогда объект для второй формы, аналогично первой
$(document).ready(function () {
if ($("#orderFormSubmiter").length) {
new OrderFormValidator();
}
if ($("#orderFormSubmiter2").length) {
new OrderFormValidator();
}
});
|
|
11.04.2013, 12:26
|
Аспирант
|
|
Регистрация: 17.07.2012
Сообщений: 34
|
|
Вот самое интересное что это и не работает=) я уже так пробывал....
в этой строчке проблема когда я так делаю... (видимо) как я думаю
this.validator.SetSubmiterName("orderFormSubmiter" );
|
|
11.04.2013, 12:32
|
|
Профессор
|
|
Регистрация: 17.01.2013
Сообщений: 887
|
|
тогда сделайте классами, поставьте обеим формам class="orderFormSubmiter" и
$(document).ready(function () {
if ($(".orderFormSubmiter").length) {
new OrderFormValidator();
}
});
|
|
11.04.2013, 13:24
|
Аспирант
|
|
Регистрация: 17.07.2012
Сообщений: 34
|
|
Так же не хочет работать
Весь код привожу что у меня есть
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();
}
});
|
|
|
|