2010-12-03 7 views
1

J'ai quelques problèmes pour essayer de comprendre ce qui ne va pas avec la conception de mon objet. Lorsque le document est entièrement chargé, init() est automatiquement appelé et initialise l'objet. Je dois noter que le membre textarea pointe correctement vers l'élément souhaité. Un événement click est attaché à un bouton "reply", ainsi la fonction reply_to() est appelée lorsque l'utilisateur clique dessus.Javascript: Comment accéder au membre de l'objet à partir de la fonction de rappel d'événement

Donc, voici ce que je ne comprends pas: * L'utilisation de "ceci" est sécuritaire? L'utiliser depuis reply_to() ne l'est pas, car il semble que le contexte soit défini sur l'élément appelant. * Pourquoi puis-je appeler "set_text()" de reply_to, mais je ne peux pas accéder au membre "textarea"? * Comment faire pour accéder au membre "textarea" de reply_to() (qui est un callback d'événement)?

Répondre

4

Puisque dans ces gestionnaires le contexte va changer, il est plus facile de garder une référence au contexte que vous voulez, personnellement, je préfère self. Voici un autre format:

var comment = function(){ 
    this.textarea = null; 
    var self = this; 
    $(document).ready(init); 

    function init() 
    { 
     $('.reply').click(reply_to); 
     self.textarea = $('.commentbox textarea'); 
    } 

    function set_text(the_text) 
    { 
     self.textarea.val(the_text); 
    } 

    function reply_to() { 
     set_text('a test text'); 
    } 
}(); 

You can test it here. Certes, je ne suis pas vraiment sûr de ce que vous essayez d'accomplir si. Vous essayez de retourner la fonction reply_to, mais reliez-la vous-même à l'intérieur du gestionnaire prêt init() ... donc vous pouvez le lier immédiatement (comme ci-dessus), ou le changer et retourner ce que vous voulez lier ailleurs.

+0

Je le retourne parce que je veux qu'il soit public. Bien que je n'ai pas testé si pour l'utiliser comme rappel, il doit être public ... Je vais le tester –

+0

Ok, ça n'a pas besoin d'être public. –

Questions connexes