2014-11-17 5 views
0

Я хочу вызвать функцию в событии click, мой коллег определил функцию, как указано ниже. Почему-то я не могу получить к нему доступ, что не так?jQuery - неопределенный вызов функции при нажатии

function Start(data) { 

this.move= function() { 
    .... 
}; 

    $('.button').click(function(){ 

     this.move(); 
    }); 

} 
+1

Вы импортируете jquery в свой html? – vaso123

ответ

3

this в функции мыши является кликой элемента. Сохранить ссылку на объект в переменной вне функции и использовать его:

function Start(data) { 
    var self = this; //HERE 

    this.move= function() { 
     .... 
    }; 

    $('.button').click(function(){ 

     self.move(); 
    }); 

} 

Here's an article, которые могут дать вам больше объяснений по поводу выше исправления.

+0

Отличный ответ! , – theonlygusti

1

попробуйте это, вы должны помнить ссылку на свою основную функцию.

function Start(data) { 
var that = this; 
this.move = function() { 
    .... 
}; 

    $('.button').click(function(){ 

     that.move(); 
    }); 

} 
1

Другим способом, чтобы область применения является использование jQuery's proxy()

$('.button').click($.proxy(this.move, this)); 
+1

Ты избил меня. '$ .proxy' - более простой способ сделать это. –

1

В обработчик события, связанный с JQuery, this относится к элементу DOM, на котором был связан обработчик. См. jQuery Event Basics.

Вы можете переопределить JQuery-х this связывание с помощью function#bind на обработчик щелчка:

function Start(data) { 
    this.move= function() { 
     .... 
    }; 

    $('.button').click(function(){ 
     this.move(); 
    }.bind(this)); 
} 

Остерегайтесь поддержки браузера для function#bind - если цель старых браузеров вам понадобится polyfill или просто присвоить значение this другой переменной.

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