2013-06-24 5 views
2

В конструкторе моего объекта я создаю некоторый тег span, и мне нужно ссылаться на метод одного и того же объекта.Связать событие click с методом внутри класса

Вот пример моего кода:

$(document).ready(function(){ 
    var slider = new myObject("name"); 
}); 

function myObject(data){ 
    this.name = data; 

    //Add a span tag, and the onclick must refer to the object's method 
    $("body").append("<span>Test</span>"); 
    $("span").click(function(){ 
     myMethod(); //I want to exec the method of the current object 
    }); 


    this.myMethod = myMethod; 
    function myMethod(){ 
     alert(this.name); //This show undefined 
    } 

} 

С помощью этого кода метода вызывается, но это не является ссылка на объект (this.name шоу неопределенного) Как я могу решить это?

Большое спасибо!

+2

его потому, что 'this' будет иметь в виду текущей области (что было бы событие, которое вызвало it ie, click) –

ответ

5

Один простой способ для достижения этой цели:

function myObject(data){ 
    this.name = data; 

    // Store a reference to your object 
    var that = this; 

    $("body").append("<span>Test</span>"); 
    $("span").click(function(){ 
     that.myMethod(); // Execute in the context of your object 
    }); 

    this.myMethod = function(){ 
     alert(this.name); 
    } 
} 

Другой способ, с помощью $.proxy:

function myObject(data){ 
    this.name = data; 

    $("body").append("<span>Test</span>"); 
    $("span").click($.proxy(this.myMethod, this)); 

    this.myMethod = function(){ 
     alert(this.name); 
    } 
} 
+0

или мы могли бы просто использовать 'data' вместо' this.name' –

+0

@GokulKav Или $ .proxy, как я только что добавил. Или свяжите. Есть несколько решений – bfavaretto

+0

yep .. upvoted your solution –

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