2010-06-05 5 views
2

Lorsque j'essaie d'appeler la fonction "Test", j'obtiens une erreur.
Comment résoudre ce problème? (Pas jquery!)Déclenchement d'événement à l'intérieur du prototype

Navigateur: Firefox
erreur:

TypeError: this.Test is not a function

<head> 
     <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1"> 
     <title>Untitled Document</title> 
     <script type="text/javascript"> 



      MyClass = function(){ 
      } 

      MyClass.prototype = { 

       Init: function(){ 
        var txt = document.getElementById("text"); 

        if (txt.addEventListener) { 
         txt.addEventListener("keyup", this.Foo, true) 
        } 


       }, 

       Foo: function(){ 
        this.Test(); 
       }, 

       Test: function(){ 
        alert('OK'); 
       } 


      } 
      window.onload = function(){ 
       obj = new MyClass; 
       obj.Init(); 
      } 
     </script> 
    </head> 
    <body> 
    <textarea id="text" rows="10"> 
    </textarea> 
    </div> 
</body> 
+1

Quelle est l'erreur? Quel navigateur? IE ne supporte pas addEventListener(), il utilise attachEvent(). C'est pourquoi la plupart des gens utilisent un framework comme JQuery ou YUI, etc ... –

+0

puh-leeze quand vous obtenez une erreur, * le citez * dans votre question. –

+0

Je pense que vous pourriez utiliser jQuery pour cela. –

Répondre

0

C'est parce que vous faites référence à this.Foo comme l'événement, ce qui se passe en réalité est qu'il copie qui fonctionnent hors du champ d'objet, ergo this n'existe pas. La plupart des gens utilisent une fonction/un wrapper anonyme autour de l'événement.

+0

S'il vous plaît montrer comment le faire. – shivesh

+0

'ceci 'existe: au moment où l'événement se déclenche, il est défini sur l'élément' textarea # text'. –

+2

@shivesh quelque chose comme ça? 'var self \t = ceci; txt.addEventListener ("keyup", function() {self.Foo();}, true); ' @Marcel Ce n'est pas tout à fait vrai dans ce scénario, la plupart des bibliothèques JS s'assurent que' this' est l'élément, mais en javascript natif que le comportement n'est pas 100% preuve de navigateur croisé. – CharlesLeaf

Questions connexes