Maison > interface Web > js tutoriel > Comment utiliser correctement $(this) de jQuery avec les fonctions fléchées ES6 dans les gestionnaires d'événements ?

Comment utiliser correctement $(this) de jQuery avec les fonctions fléchées ES6 dans les gestionnaires d'événements ?

Mary-Kate Olsen
Libérer: 2024-12-14 06:15:12
original
376 Les gens l'ont consulté

How to Correctly Use jQuery's $(this) with ES6 Arrow Functions in Event Handlers?

Utilisation de jQuery $(this) avec les fonctions fléchées ES6 (lexical cette liaison)

La liaison des gestionnaires d'événements utilisant les fonctions fléchées ES6 peut être problématique lorsque travailler avec le sélecteur $(this) de jQuery. En effet, les fonctions fléchées lient lexicalement le mot-clé this, ce qui peut ne pas être le comportement souhaité dans les rappels jQuery.

L'exemple suivant illustre le problème :

class Game {
  foo() {
    this._pads.on('click', () => {
      if (this.go) { $(this).addClass('active'); }
    });
  }
}
Copier après la connexion

Dans l'exemple ci-dessus, en utilisant une fonction de flèche pour le gestionnaire d'événements click entraîne $(this) référençant l'instance de jeu au lieu de l'élément cliqué. En effet, les fonctions fléchées n'ont pas leur propre liaison, elles en héritent donc de la portée environnante.

Solution

Pour résoudre ce problème, évitez d'utiliser les fonctions fléchées lors de la liaison des gestionnaires d'événements jQuery. Utilisez plutôt des déclarations de fonction traditionnelles ou liez explicitement le mot-clé this à l'aide de la méthode bind :

class Game {
  foo() {
    this._pads.on('click', function() {
      if (this.go) { $(this).addClass('active'); }
    }.bind(this));
  }
}
Copier après la connexion

Vous pouvez également accéder à l'élément cliqué à l'aide de event.currentTarget :

class Game {
  foo() {
    this._pads.on('click', (event) => {
      if (this.go) { $(event.currentTarget).addClass('active'); }
    });
  }
}
Copier après la connexion

Utilisation de l'événement .currentTarget donne accès à l'élément qui a déclenché l'événement, quel que soit le contexte de liaison de la fonction de rappel.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

source:php.cn
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal