2013-09-25 3 views
5

Извините за мой английский. Вот пример код:Как получить доступ к объекту внутри функции события jQuery

/** 
* @constructor 
*/ 
function MyNewClass(){ 
    this.$my_new_button = $('<button>Button</button>'); 
    this.my_value = 5; 

    this.init = function(){ 
    $('body').append(this.$my_new_button); 
    this.$my_new_button.click(
     function(){ 
     // Its always alerts "undefined" 
     alert(this.my_value); 
     } 
    ) 
    } 
} 

Как я могу получить доступ к объектам my_value свойства внутри JQuery нажмите функцию событий? Возможно ли это?

ответ

6

Вы можете сделать следующее

function MyNewClass(){ 
    this.$my_new_button = $('<button>Button</button>'); 
    this.my_value = 5; 
    var self = this; //add in a reference to this 
    this.init = function(){ 
     $('body').append(this.$my_new_button); 
     this.$my_new_button.click(
      function(){ 
       //This will now alert 5. 
       alert(self.my_value); 
      } 
     ); 
    }; 
} 

Это небольшой рисунок в JavaScript (хотя название ускользает от меня). Он позволяет вам получить доступ к элементам верхнего уровня функции внутри внутренней функции. Во вложенной функции вы не можете использовать «this» для ссылки на членов верхнего уровня, поскольку они будут относиться только к той функции, в которой вы находитесь. следовательно, необходимо объявить функции верхнего уровня «это» значение в свою собственную переменную (в данном случае это называется «я»).

4

Jquery имеет метод для этого, jQuery.proxy(function, context):

function MyNewClass(){ 
    this.$my_new_button = $('<button>Button</button>'); 
    this.my_value = 5; 

    this.init = function(){ 
    $('body').append(this.$my_new_button); 
    this.$my_new_button.click(
     $.proxy(function(){ 
     // Its always alerts "undefined" 
     alert(this.my_value); 
     },this) 
    ) 
    } 
} 

DEMO

Смежные вопросы