Heim > Web-Frontend > js-Tutorial > Warum schlägt „$(this)' in jQuery-Click-Handlern mit ES6-Pfeilfunktionen fehl?

Warum schlägt „$(this)' in jQuery-Click-Handlern mit ES6-Pfeilfunktionen fehl?

DDD
Freigeben: 2024-12-15 19:47:14
Original
148 Leute haben es durchsucht

Why Does `$(this)` Fail in jQuery Click Handlers with ES6 Arrow Functions?

ES6-Pfeilfunktionen und jQuery $(this): Bindungsverwirrung

ES6-Pfeilfunktionen stellen diese lexikalische Bindung bereit und vereinfachen den Code, indem sie die Notwendigkeit beseitigen für explizite bind()-Aufrufe. Bei Verwendung mit der Klickbindung von jQuery kann dieses Verhalten jedoch Probleme verursachen.

Unerwartetes Verhalten mit Pfeilfunktionen:

Beachten Sie den folgenden Code:

class Game {
  foo() {
    this._pads.on('click', function() {
      if (this.go) { $(this).addClass('active'); }
    });
  }
}
Nach dem Login kopieren

Durch Verwendung einer Pfeilfunktion stattdessen:

class Game {
  foo() {
    this._pads.on('click', () => {
      if (this.go) { $(this).addClass('active'); }
    });
  }
}
Nach dem Login kopieren

Die $(this)-Referenz wird in konvertiert ein Verschluss im ES5-Stil (self = this).

Verstehen der ES6-Pfeilfunktionsbindung:

Dieses Verhalten ist den ES6-Pfeilfunktionen inhärent und kein Problem mit Traceur Übersetzung. Pfeilfunktionen binden diese immer lexikalisch an den umschließenden Kontext. In diesem Fall die foo()-Methode.

Lösung mit event.currentTarget:

Um das Problem zu beheben, verwenden Sie event.currentTarget anstelle von $(this) to Greifen Sie innerhalb des Rückrufs der Pfeilfunktion auf das angeklickte Element zu:

class Game {
  foo(){
    this._pads.on('click', (event) => {
      if(this.go) {
        $(event.currentTarget).addClass('active');
      }
    });
  }
}
Nach dem Login kopieren

jQuery stellt speziell event.currentTarget bereit, um Situationen zu berücksichtigen, in denen die Rückruffunktion erforderlich ist Möglicherweise haben Sie keinen Zugriff auf den richtigen Kontext.

Das obige ist der detaillierte Inhalt vonWarum schlägt „$(this)' in jQuery-Click-Handlern mit ES6-Pfeilfunktionen fehl?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage