Javascript-форум (https://javascript.ru/forum/)
-   Общие вопросы Javascript (https://javascript.ru/forum/misc/)
-   -   Почему не работает функция? Редактировать (https://javascript.ru/forum/misc/34030-pochemu-ne-rabotaet-funkciya-redaktirovat.html)

Isaac 18.12.2012 14:37

Почему не работает функция? Редактировать
 
Здравствуйте. Подскажите пожалуйста.
Есть код, который проверяет поле формы, который находится в контроллере.
var exports = this;
jQuery(function ($) {
    exports.RegistrationForm = Controller.create({
        elements: {
            "input[name='email']" : "emailInput",
            "form" : "registrationForm"
        },

        init: function (element) {
            this.el = $(element);
            this.refreshElements();
            this.registrationForm.submit(this.proxy(this.email));
        },

        email: function () {
            //alert("Searching: " + this.emailInput.val());
            this.email = this.emailInput.val();
            this.get_validator(this.email);
            return false;
        },

        $: function (selector) {
            return $(selector, this.el)
        },

        refreshElements: function () {
            for (var key in this.elements)
            {
                this[this.elements[key]] = this.$(key);
            }
        },

        get_validator: function (values) {
            var validator = {
                types: {},
                messages: [],
                config: {},
                validate: function (data) {
                    var i, msg, type, checker, result_ok;
                    this.messages = [];

                    for (i in data)
                    {
                        if (data.hasOwnProperty(i))
                        {
                            type = this.config[i];
                            checker = this.types[type];

                            if (!type) {
                                continue; // no need to validate
                            }
                            if (!checker) {
                                throw {
                                    name:"ValidationError",
                                    message:"No handler to validate type " + type
                                };
                            }

                            result_ok = checker.validate(data[i]); // ВОТ ЭТА ФУНКЦИЯ НЕ ОТРАБАТЫВАЕТ!!!

                            if (!result_ok) {
                                msg = "Invalid value for *" + i + "*, " + checker.instructions;
                                this.messages.push(msg);
                            }
                        }
                    }

                    return this.hasErrors();
                },

                // helper
                hasErrors:function () {
                    return this.messages.length !== 0;
                }
            };

            validator.types.isNonEmpty = {
                validate: function (values) {
                    return value !== "";
                },
                instructions: "The value cannot be empty"
            };


            var data = {
                //email: values
                email: "Super"
            };

            validator.config = {
                email: "isNonEmpty"
            };

            validator.validate(data);

            if (validator.hasErrors())
                alert(validator.messages.join("\n"));
        }
    });

    new RegistrationForm('#registration_block');
});

Код работает. кроме одной строчки, в которой я добавил комментарий. Почему я не могу вызвать функцию, в которой нахожусь? Если код отделить от контроллера, и создать отдельный объект validate, то все работает супер! Подскажите пожалуйста, срочно нужна помощь!
Спасибо огромное!

ОлегА 18.12.2012 15:01

а что именно происходит, говорит что нет такой функции или не доходит до нее?

ОлегА 18.12.2012 15:02

вместо checker.validate(data[i]) попробуй this.validate(data[i]) сделать

Isaac 18.12.2012 15:04

Консоль ничего не выводит! Код доходит до этой строчки и дальше не срабатывает, а если это строчку закомментировать, то код продолжает работать дальше.
Этим способом тоже делал, - результат прежний...

ОлегА 18.12.2012 15:19

попробуй через родителя вызвать

Isaac 18.12.2012 15:21

Тоже самое..

ОлегА 18.12.2012 15:22

т.е. validator.validate(data[i]); так тоже не канает?

Isaac 18.12.2012 15:29

Так работает, но мне нужно вызывать через checker.validate(data[i])

Isaac 18.12.2012 15:41

Цитата:

Сообщение от ОлегА (Сообщение 222085)
т.е. validator.validate(data[i]); так тоже не канает?

Точнее функция отрабатывает, но работает не корректно, так как ее нужно вызывать, как я писал выше

ОлегА 18.12.2012 15:59

у вас где то синтаксическая ошибка появляется может переменная какая отваливается, может еще что то, когда код начинает по вашему методу отрабатывает, попробуйте алерты в for понатыкать и вычислить момент когда отваливается скрипт


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