2017-02-24 66 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

相關問題