2009-10-16 7 views
2

J'ai la situation suivante. Dans un constructeur d'une pseudo classe, j'attache un événement click à un élément. Lorsque l'événement est déclenché, je voudrais faire référence à partir de la fonction de rappel à l'objet où l'événement a été défini.Référence à un objet d'une fonction de rappel dans jQuery

code du constructeur de la classe pseudo

function MyClass(){ 
    this.myClassAttribute = "A class attribute"; 

    // here `this` refers to the object 

    $("span").click(function(){ 
    // here `this` refer to a matched element, i.e. "span" 
    // How to get the value of `myClassAttribute`? 
    }); 

} 

Comment se référer à l'objet sans une variable globale?

Répondre

12

En Javascript une fonction anonyme est capable de référencer toutes les variables qui existaient au moment de la création de la fonction. Puisque this est réaffecté dans la fonction de rappel, vous pouvez créer une variable locale pour la stocker avant d'entrer le rappel.

function MyClass(){ 
    this.myClassAttribute = "A class attribute"; 
    var myClass = this; 

    $("span").click(function(){ 
    myClass.myClassAttribute = "hello"; 
    }); 

} 
+0

Votre fonction de gestionnaire de clic est une fermeture, ils sont une partie puissante de javascript http://www.google.com/search?q=javascript+closures – JeremyWeir

+0

Je sais que c'est déjà plusieurs années. Mais j'ai rencontré un problème avec cette solution. Si vous avez plusieurs instances de classe, mieux vaut utiliser la réponse fournie par @Stephen Delano. Parce que myClass contiendra toujours la dernière instance créée. – Jodo

8

Ceci est mieux documenté dans l'API jQuery. jQuery Bind

.cliquez $ est juste un raccourci pour .bind $ ('click',/aucune donnée /, rappel)

$('span').bind('click', { parentObj: this }, function(e) { 
    var parentObj = e.data.parentObj; 
    // the rest of your code goes here 
} 

J'espère que cela aide!

+0

C'est la bonne façon de le faire, je pense! – nacholibre

Questions connexes