Jump to content
  • 0

Вызов функции


Hol1killer
 Share

Question

Добрый день, я новенький программист, раньше писал на С++, в 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, {
this.validator.AddElem(a, ;
},
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(;
}
};

и точка входа


$(document).ready(function () {
if ($("#orderFormSubmiter").length) {
new OrderFormValidator();
}
});

но у меня 2 формы с ID orderFormSubmiter на 1 странице и валидация проходит только для 1 формы а для 2 никак не хочется, пробывал через each() но ничего не получилось, нужно вызывать OrderFormValidator() для каждой формы по отдельности но это не получается и он вызывает только для 1 формы или я что-то не так понимаю, я новенький надеюсь на вашу помощь.

Link to comment
Share on other sites

9 answers to this question

Recommended Posts

  • 0

но у меня 2 формы с ID orderFormSubmiter на 1 странице и валидация проходит только для 1 формы а для 2 никак не хочется, пробывал через each() но ничего не получилось, нужно вызывать OrderFormValidator() для каждой формы по отдельности но это не получается и он вызывает только для 1 формы или я что-то не так понимаю, я новенький надеюсь на вашу помощь.

ID должен быть уникальным в документе. Поэтому нужно заменить сначала селектор на class, а потом уже each применять

 $(".orderFormSubmiter").each( function(){ if ($(this).length) {....

Не ручаюсь за правильность кода, я в jQuery олух

Link to comment
Share on other sites

  • 0

Тут jQuery не при чем.

Из jQuery только проверка существования элемента с айди orderFormSubmiter, что не сложно было бы и без джквери сделать.

Скорее всего вот строка которая находит форму: this.validator.SetSubmiterName("orderFormSubmiter"); (метод DoAddElems)

Решение -- скопировать конструктор OrderFormValidator изменив его название (например MyFormValidator)

Скопировать для него прототип MyFormValidator.prototype = {... в этом прототипе указать нужный айди формы this.validator.SetSubmiterName("myFormSubmiter")

Link to comment
Share on other sites

  • 0

Спасибо за ответы

Ну это тогда получается что я дублирую код, что не очень хорошо? или другого варианта тут нету? И можно какую нибудь литературу по ООП для Javascript.

Я знаю что jQuery тут только на точку входа влияет, а остальное я как понял prototype, просто я в WEB программировании не силен пока=)

Link to comment
Share on other sites

  • 0

var b = (c && a);
this.validator.DoChangeSubmitActive(;

А тут регистр b поменялся, это так надо?

Все что есть у меня. Я просто не до конца понимаю как это работает, если объясните или ссылочку на материал где можно почитать, буду благодарен!


function SubmitValidatorFuncs() {}
SubmitValidatorFuncs.prototype = {
submiterName: "",
submiterDisabledClassName: "submiterDisabled",
subValidator: Object(),
SetSubmiterDisabeldClassName: function (a) {
this.submiterDisabledClassName = a;
},
AddElem: function (a, {
a = "#" + a;
this.BindElem(a, ;
},
AddElemClass: function (a, {
this.BindElem(a, ;
},
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, {
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 ( {
var a = "#" + this.submiterName;
if ( {
$(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 ( {
a.SetSubmiterName(;
},
SetSubValidator: function ( {
a.SetSubValidator(;
},
AddElem: function (b, c) {
a.AddElem(b, c);
},
AddElemClass: function (b, c) {
a.AddElemClass(b, c);
},
IsChecked: function ( {
return a.IsChecked(;
},
IsNotChecked: function ( {
return a.IsNotChecked(;
},
IsEmptyInput: function ( {
return a.IsEmptyInput(;
},
IsNotEmptyInput: function ( {
return a.IsNotEmptyInput(;
},
IsEmptyInputTextarea: function ( {
return a.IsEmptyInputTextarea(;
},
IsNotEmptyTextarea: function ( {
return a.IsNotEmptyTextarea(;
},
IsSelectedZero: function ( {
return a.IsSelectedZero(;
},
IsNotSelectedZero: function ( {
return a.IsNotSelectedZero(;
},
IsSelectedNatural: function ( {
return a.IsSelectedNatural(;
},
IsPositive: function ( {
return a.IsPositive(;
},
IsDateValid: function (c, {
return a.IsDateValid(c, ;
},
DoChangeSubmitActive: function ( {
a.DoChangeSubmitActive(;
},
IsEmailValid: function ( {
return a.IsEmailValid(;
},
SetSubmiterDisabeldClassName: function ( {
a.submiterDisabledClassName = b;
},
DoChangeErrorClass: function (c, {
a.DoChangeErrorClass(c, ;
}
};
}
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, {
this.validator.AddElem(a, ;
},
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(;
}
};
$(document).ready(function () {
if ($("#orderFormSubmiter").length) {
new OrderFormValidator();
}
});

Edited by Hol1killer
Link to comment
Share on other sites

  • 0
Решение -- скопировать конструктор OrderFormValidator изменив его название (например MyFormValidator) Скопировать для него прототип MyFormValidator.prototype ={... в этом прототипе указать нужный айди формы this.validator.SetSubmiterName("myFormSubmiter")

Попробывал скопировал имена изменил, все ID тоже изменил, тогда 2 форма связывается с 1 и кнопка на ней становится неактивной, и когда заполняю 1 форму то на обоих формах кнопка становится активной и можно отправлять. Тоесть как бы пока 1 форму не заполнишь на 2 форме кнопка неактивна, вообще нифига не понимаю

Link to comment
Share on other sites

  • 0

Дублирование плохо конечно.

Но тут по коду похоже что для каждой формы надо делать свой конструктор. Наверное так проще будет в дальнейшем.

Тут нету прототайпа. Все на чистый джс и джквери.

DoPrepareHiddenElems: function () {

var a = (window.location.hash.toString() == "#order");

if (a) {

$("#name").focus();

}

},

Тут тоже айди менять надо.

Но это не должно влиять на то что формы так активируются. Смотреть надо.

Link to comment
Share on other sites

  • 0

А как вообще можно для форм с одинаковой структурой делать одинаковый код на валидацию и другое? У меня формы только одним полем отличаются? и я не хочу что бы у каждой формы были разные ID, а так же приходится изменить ID полей текстовых

С дублированием кода у меня все получилось я сделал конструктор и скопировал прототип и пошло, ( да я узнал что прототип это наследование )

Так же для примера спрашиваю:

DoAddElems: function () {

this.validator.SetSubmiterName("orderFormSubmiter");

this.validator.AddElem("name", "input");

this.validator.AddElem("phone", "input");

},

могули я внутри DoAddElems использовать Jquery код ?

Так же мне нужно еще одну форму на эту страницу пихнуть, тоесть их там 3 будет, но она будет дублем 2 формы точно такая же только выше и в другом дизайне, поля и html код такой же, мне и для этой формы придется дублировать конструктор и прототип?

Edited by Hol1killer
Link to comment
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.
Note: Your post will require moderator approval before it will be visible.

Guest
Answer this question...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

 Share

×
×
  • Create New...

Important Information

We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue. See more about our Guidelines and Privacy Policy