доступ к переменной объекта Jquery внутри литеральной функции объекта

0

Я не могу понять, почему я не могу проверить метод.change() объекта jquery, хранящегося в переменной. Является ли это синтаксической ошибкой? Я потерял контекст?

Вот мой код:

var MyObj = {

    //declaration
    reference : $('#reference'),
    observeReference : function() {

        //The following line is not tracking the .change() method. 
        //Not sure why... And I didn't any get console error!
        this.reference.change(function() {
            var opt = $('#reference option:selected').text();

            if (opt === 'other' || opt === 'reference') {
                $('#input_other').fadeIn();
            } else{
                $('#input_other').fadeOut();
                $('#input_other_bx').val('');
            };
        }.bind(this));      
    },
    init: function() {
        this.observeReference();
    }
};

$(document).ready(function() {
     MyObj.init();
});
  • 0
    Скорее всего, ваш элемент id="reference" не существует, когда ваш MyObj объявлен. Также нет смысла спрашивать нас "это синтаксическая ошибка" ; Вы можете просто проверить консоль инструментов разработчика.
  • 0
    @Phil Да, это должно быть проблемой, установка свойства в области init должна решить проблему.
Показать ещё 1 комментарий
Теги:
scope
object-literal

1 ответ

2
Лучший ответ

Если $('#reference') выполняется до готовности документа, он получит объект jquery, length = 0 которого length = 0.

init будет выполняться после готовности документа, поэтому назначьте ссылку в методе init.

var MyObj = {

//declaration
reference : null,
...

init: function() {
    this.reference = $('#reference');
    this.observeReference();
}
  • 0
    Именно так! Спасибо за помощь...

Ещё вопросы

Сообщество Overcoder
Наверх
Меню