2017-02-24 67 views
-1

当您单击文本But no success when you click me时,会发生错误。我知道错误发生的原因。我的问题是什么是最好的解决办法?发生此错误的原因是,当单击mydiv时调用x.athismydiv。我们怎样才能使x.a成功运行时点击mydivJavaScript中的'this'和addEventListener

<!DOCTYPE html> 
 
    <html> 
 
    <head> 
 
    \t <title></title> 
 
    </head> 
 
    <body> 
 
    \t <div id="mydiv">But no success when you click me</div> 
 
    
 
    \t <script> 
 
    \t \t var x = new Thing(); 
 
    \t \t var y = document.getElementById('mydiv'); 
 
    \t \t x.a(); 
 
    \t \t y.addEventListener('click', x.a, false); 
 
    \t \t 
 
    \t \t function Thing() { 
 
    \t \t \t this.a=function() { 
 
    \t \t \t \t this.b(); 
 
    \t \t \t } 
 
    
 
    \t \t \t this.b=function() { 
 
    \t \t \t \t alert('Success'); 
 
    \t \t \t } 
 
    \t \t } 
 
    \t </script> 
 
    </body> 
 
    </html>

+0

上述HTML文件位于http://globebop.com/intro/test/2.htm –

+1

'x.a'没有绑定任何东西。用'()=> x.a()'替换'x.a'。 – 2017-02-24 07:23:15

+0

对不起,Toraz。那是错的。 –

回答

2

y.addEventListener('click', x.a.bind(x), false);

当一个事件监听器绑定到一个方法,当时的方法被调用(当你点击一个div /按钮)this是要反映调用该方法的上下文。

+0

谢谢,gor181。这很好。当你点击mydiv并执行x.a时,这会使'this'的值为x而不是mydiv。 –

+0

@JimAndrews是的,他知道它为什么起作用。这就是他发布答案的原因。 – 2017-02-24 10:16:06

相关问题