2010-06-05 8 views
2

"테스트"기능을 호출하려고하면 오류가 발생합니다.
어떻게 해결할 수 있습니까? (아무 JQuery와!)프로토 타입 내부 이벤트 트리거

브라우저 : 파이어 폭스
오류 :

TypeError: this.Test is not a function

당신이 이벤트로 this.Foo를 참조 때문입니다
<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

무엇이 오류입니까? 어떤 브라우저? IE는 addEventListener()를 지원하지 않으며 attachEvent()를 사용합니다. 이것은 대부분의 사람들이 JQuery 나 YUI 등과 같은 프레임 워크를 사용하는 이유입니다. –

+0

오류가 발생하면 puh-leeze가 표시됩니다. –

+0

나는 이것을 위해 jQuery를 사용할 수 있다고 생각한다. –

답변

0

, 무엇 실제로 일어나는 것은 그 대상 범위에서 기능을 복사, ergo this가 존재하지 않습니다. 대부분의 사람들은 익명의 함수/래퍼를 사용합니다.

+0

어떻게하는지 보여주십시오. – shivesh

+0

'this'는 존재합니다 : 이벤트가 발생하는 순간, 그것은'textarea # text' 요소로 설정됩니다. –

+2

@shivesh이게 뭐니? 'var self \t = this; @Marcel이 시나리오에서 완전히 사실이 아니기 때문에 대부분의 JS 라이브러리는 'this'가 요소임을 확인하지만 네이티브 자바 스크립트에서 동작은 100 % 크로스 브라우저 증명이 아닙니다. – CharlesLeaf