2010-06-17 4 views
1

J'ai ce code je travaille, mais chaque fois que je l'appelle méthode init Je continue à obtenir une erreurappeler une méthode à partir d'un gestionnaire d'événements

this.addElement est pas une fonction

est parce que je ne peux pas appeler des méthodes à partir des gestionnaires d'événements?

function editor() { 

    this.init = function() { 
     $("#area").bind('click' , this.click_event); 

    } 

    this.addElement = function() { 
     console.log("adding element"); 
    } 

    this.click_event = function(event) { 
     this.addElement(); 
     console.log("click event in x : "+event.data); 
    } 
} 
+0

Vous pouvez certainement méthodes d'appel à partir des gestionnaires d'événements. La question est, qu'est-ce que 'this', dans' click_event'? Comprenez cela, et le monde est votre mollusque. – Amadan

+0

même lorsque je supprime "this" je reçois toujours la même erreur – Ayoub

+0

Si vous supprimez 'this', il est toujours là implicitement:' this.addElement() 'est le même que' addElement() '. Mais inspectez "ceci" - il est fort probable que ce n'est pas ce que vous vouliez. – Amadan

Répondre

6
function editor() { 
    var that = this; 

    this.init = function() { 
     $("#area").bind('click' , this.click_event); 

    } 

    this.addElement = function() { 
     console.log("adding element"); 
    } 

    this.click_event = function(event) { 
     that.addElement(); 
     console.log("click event in x : "+event.data); 
    } 
} 

Vous devriez lire ce livre, JavaScript: the Good Parts et visitez le site Web de Crockenator ici, crockford.com

Vous pouvez également lire sur le JavaScript "cette" question ici, http://www.quirksmode.org/js/this.html

+0

@Ayoub: Fondamentalement, 'this' est très différent en JavaScript que dans d'autres langages, comme Java ou C#. C'est entièrement déterminé par la façon dont une fonction est appelée *, et non par où elle est définie. Plus: http://blog.niftysnippets.org/2008/04/you-must-remember-this.html –

Questions connexes