Javascript-форум (https://javascript.ru/forum/)
-   Prototype & script.aculo.us (https://javascript.ru/forum/prototype-script-aculo-us/)
-   -   Вызов функции (https://javascript.ru/forum/prototype-script-aculo-us/37184-vyzov-funkcii.html)

Hol1killer 10.04.2013 17:27

Вызов функции
 
Добрый день, я новенький программист, раньше писал на С++, в 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 формы или я что-то не так понимаю, я новенький надеюсь на вашу помощь.

danik.js 11.04.2013 01:50

Цитата:

Сообщение от Hol1killer
но у меня 2 формы с ID orderFormSubmiter на 1 странице

А в C++ разве можно создавать два и более контрола скажем с одним Name ? Коллизий не будет? Вот тут с id примерно также. Id должен быть уникальный. В остальных случаях есть class, name и прочие атрибуты.

Skipp 11.04.2013 09:32

А зачем делать обход по id, сделайте обход по form и всё, если уж id никак не поменять.

Hol1killer 11.04.2013 11:42

Ребят спасибо, помогло, валидация проходит но следующая беда

функция

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

animhotep 11.04.2013 11:59

есть возможность поставить второй форме #orderFormSubmiter2 ?

Hol1killer 11.04.2013 12:12

да есть, но вообще #orderFormSubmiter висит на кнопке которая после отправляет ajax запрос, но я думаю это тут не важно.

animhotep 11.04.2013 12:19

добавь тогда объект для второй формы, аналогично первой

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

Hol1killer 11.04.2013 12:26

Вот самое интересное что это и не работает=) я уже так пробывал....

в этой строчке проблема когда я так делаю... (видимо) как я думаю
this.validator.SetSubmiterName("orderFormSubmiter" );

animhotep 11.04.2013 12:32

тогда сделайте классами, поставьте обеим формам class="orderFormSubmiter" и
$(document).ready(function () {
    if ($(".orderFormSubmiter").length) {
        new OrderFormValidator();
    }
});

Hol1killer 11.04.2013 13:24

Так же не хочет работать

Весь код привожу что у меня есть

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();
    }
});

animhotep 11.04.2013 15:49

попробуйте через классы, так
$(document).ready(function () {
    $(".orderFormSubmiter").each(function() {
        new OrderFormValidator();
    });
});

RustamGerleev 05.12.2016 01:37

Вызов функции
 
Добрый день всем

Делаю "обёртку" для класса QDialog, которая делает некоторые функции этого класса доступными в скриптах. Споткнулся на публичной функции QString windowTitle. Скрипт в упор не хочет его видеть. Если слегка изменить название функции, то работает прекрасно.

class MyDialog public QDialog
Q_OBJECT
public
explicit MyDialogQWidget parent = 0;
Q_INVOKABLE void setWindowTitleQString title QDialogsetWindowTitletitle; // работает
Q_INVOKABLE QString windowTitle return QDialogwindowTitle; // НЕ РАБОТАЕТ
Q_INVOKABLE QString myWindowTitle return QDialogwindowTitle; // с измененным названием работает
;

Что не так?


Часовой пояс GMT +3, время: 15:59.