2017-02-24 7 views
-1

Wenn Sie auf den Text But no success when you click me klicken, tritt ein Fehler auf. Ich weiß, warum der Fehler auftritt. Meine Frage ist, was ist die beste Lösung? Der Fehler tritt auf, wenn x.a aufgerufen wird, wenn mydiv geklickt wird, this ist mydiv. Wie können wir es so machen, dass x.a erfolgreich ausgeführt wird, wenn mydiv geklickt wird?'this' und addEventListener in JavaScript

<!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

Die obige HTML-Datei finden Sie unter http://globebop.com/intro/test/2.htm –

+1

'x.a' ist an nichts gebunden. Ersetzen Sie 'x.a' durch'() => x.a() '. –

+0

Sorry, Toraz. Das ist falsch. –

Antwort

2

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

Wenn Sie einen Ereignis-Listener ein Verfahren zu binden, zu der Zeit die Methode aufgerufen wird (wenn Sie auf einem div/Schaltfläche klicken) this wird widerzuspiegeln der Kontext, aus dem die Methode aufgerufen wurde.

+0

Danke, gor181. Das funktioniert gut. Das bedeutet, dass der Wert von "this" eher x als mydiv ist, wenn Sie auf mydiv klicken und x.a ausgeführt wird. –

+0

@JimAndrews Ja, er weiß, warum es funktioniert. Deshalb hat er die Antwort gepostet. –

Verwandte Themen