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
Mary-Kate Olsenoriginal
2024-12-14 06:15:12377parcourir

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'); }
    });
  }
}

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));
  }
}

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'); }
    });
  }
}

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!

Déclaration:
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