Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 18.12.2012, 14:37
Аватар для Isaac
Кандидат Javascript-наук
Отправить личное сообщение для Isaac Посмотреть профиль Найти все сообщения от Isaac
 
Регистрация: 03.08.2011
Сообщений: 106

Почему не работает функция? Редактировать
Здравствуйте. Подскажите пожалуйста.
Есть код, который проверяет поле формы, который находится в контроллере.
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, то все работает супер! Подскажите пожалуйста, срочно нужна помощь!
Спасибо огромное!
Ответить с цитированием
  #2 (permalink)  
Старый 18.12.2012, 15:01
Аватар для ОлегА
Профессор
Отправить личное сообщение для ОлегА Посмотреть профиль Найти все сообщения от ОлегА
 
Регистрация: 25.08.2011
Сообщений: 420

а что именно происходит, говорит что нет такой функции или не доходит до нее?
Ответить с цитированием
  #3 (permalink)  
Старый 18.12.2012, 15:02
Аватар для ОлегА
Профессор
Отправить личное сообщение для ОлегА Посмотреть профиль Найти все сообщения от ОлегА
 
Регистрация: 25.08.2011
Сообщений: 420

вместо checker.validate(data[i]) попробуй this.validate(data[i]) сделать
Ответить с цитированием
  #4 (permalink)  
Старый 18.12.2012, 15:04
Аватар для Isaac
Кандидат Javascript-наук
Отправить личное сообщение для Isaac Посмотреть профиль Найти все сообщения от Isaac
 
Регистрация: 03.08.2011
Сообщений: 106

Консоль ничего не выводит! Код доходит до этой строчки и дальше не срабатывает, а если это строчку закомментировать, то код продолжает работать дальше.
Этим способом тоже делал, - результат прежний...
Ответить с цитированием
  #5 (permalink)  
Старый 18.12.2012, 15:19
Аватар для ОлегА
Профессор
Отправить личное сообщение для ОлегА Посмотреть профиль Найти все сообщения от ОлегА
 
Регистрация: 25.08.2011
Сообщений: 420

попробуй через родителя вызвать
Ответить с цитированием
  #6 (permalink)  
Старый 18.12.2012, 15:21
Аватар для Isaac
Кандидат Javascript-наук
Отправить личное сообщение для Isaac Посмотреть профиль Найти все сообщения от Isaac
 
Регистрация: 03.08.2011
Сообщений: 106

Тоже самое..
Ответить с цитированием
  #7 (permalink)  
Старый 18.12.2012, 15:22
Аватар для ОлегА
Профессор
Отправить личное сообщение для ОлегА Посмотреть профиль Найти все сообщения от ОлегА
 
Регистрация: 25.08.2011
Сообщений: 420

т.е. validator.validate(data[i]); так тоже не канает?
Ответить с цитированием
  #8 (permalink)  
Старый 18.12.2012, 15:29
Аватар для Isaac
Кандидат Javascript-наук
Отправить личное сообщение для Isaac Посмотреть профиль Найти все сообщения от Isaac
 
Регистрация: 03.08.2011
Сообщений: 106

Так работает, но мне нужно вызывать через checker.validate(data[i])
Ответить с цитированием
  #9 (permalink)  
Старый 18.12.2012, 15:41
Аватар для Isaac
Кандидат Javascript-наук
Отправить личное сообщение для Isaac Посмотреть профиль Найти все сообщения от Isaac
 
Регистрация: 03.08.2011
Сообщений: 106

Сообщение от ОлегА Посмотреть сообщение
т.е. validator.validate(data[i]); так тоже не канает?
Точнее функция отрабатывает, но работает не корректно, так как ее нужно вызывать, как я писал выше
Ответить с цитированием
  #10 (permalink)  
Старый 18.12.2012, 15:59
Аватар для ОлегА
Профессор
Отправить личное сообщение для ОлегА Посмотреть профиль Найти все сообщения от ОлегА
 
Регистрация: 25.08.2011
Сообщений: 420

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


Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Подскажите пожалуйста почему не работает. gheka Общие вопросы Javascript 7 11.02.2012 22:07
Почему не работает из PHP? Pumych Элементы интерфейса 6 12.02.2011 13:51
Не работает функция из подключаемого файла evgenyan jQuery 3 28.10.2010 14:48
Почему не работает document.getElementById() giGnet Events/DOM/Window 3 18.04.2010 14:30
Почему не работает функция? Vitaly jQuery 10 31.07.2009 17:01