2012-06-02 3 views
0

Я не понимаю, как передать переменную из функции init в функцию bindEvent в моем объекте: На данный момент я получаю неопределенный.неопределенный переменный объект jQuery

var Fisheye = { 
    init: function() { 

     $('body').hide(); 

     $(window).load(function() { 
      $('body').fadeIn('slow'); 

      this.imgs = $('.pic').children('img'); 
      this.originalWidth = $(imgs).first().css('width'); 
      this.minWidth = 300; 

      imgs.width(300); 

      Fisheye.bindEvents(); 

     }); 

    }, 

    bindEvents: function() { 
     $(this.imgs).toggle(this.toggleClick, this.toggleClick); 
     console.log(this.imgs); // Why do I get Undefined here? 
    }, 

    toggleClick: function() { 
     //Todo 
    } 
} 


Fisheye.init(); 

Как правильно передать переменную из функции в другую в объекте?

Спасибо!

ответ

1

Вы можете сделать это:

var Fisheye = { 

    init: function() { 
     var _this = this; 
     $('body').hide(); 
     $(window).load(function() { 
      $('body').fadeIn('slow'); 
      _this.imgs = $('.pic').children('img'); 
      _this.originalWidth = $(_this.imgs).first().css('width'); 
      _this.minWidth = 300; 
      _this.imgs.width(300); 
      _this.bindEvents(); 
     }); 

    }, 

    bindEvents: function() { 
     $(this.imgs).toggle(this.toggleClick, this.toggleClick); 
    }, 

    toggleClick: function() { 
     //Todo 
    } 
} 


Fisheye.init(); 

Проблема заключается в том, что «это» в вас обработчик не был экземпляр Fisheye, но окно.

Но у вас будет аналогичная проблема с toggleClick. Решение для тех, кто мог бы сделать это:

bindEvents: function() { 
    var _this = this; 
    var toggleFunction = function(){_this.toggleClick()}; 
    $(this.imgs).toggle(toggleFunction, toggleFunction); 
}, 
+0

Великой, я понимаю! благодаря – Chuck

0

быстро только структуру, добавлять параметры функции

bindEvents: function(imgs) { 
    $(imgs).toggle(this.toggleClick, this.toggleClick); 
    console.log(imgs); // Why do I get Undefined here? 
},... 

на инициализацию функции

... 
var imgs = .. 
Fisheye.bindEvents(imgs); 
Смежные вопросы