Maison > interface Web > js tutoriel > Comment gérez-vous les références « ceci » dans les écouteurs d'événements lorsque vous traitez des éléments dynamiques ?

Comment gérez-vous les références « ceci » dans les écouteurs d'événements lorsque vous traitez des éléments dynamiques ?

Barbara Streisand
Libérer: 2024-10-28 07:50:29
original
685 Les gens l'ont consulté

How Do You Handle

Gestion de la référence "this" dans les écouteurs d'événements

Dans la programmation orientée objet, le mot-clé "this" fait référence à l'objet sur lequel un la méthode est invoquée. Cependant, lorsque vous utilisez addEventListener pour gérer des événements sur des éléments rendus dynamiquement, la référence "this" peut devenir problématique.

Le problème

Comme indiqué dans le code fourni, lorsque un écouteur d'événement est attaché à une cellule à l'aide de addEventListener, la référence "this" dans la fonction de gestionnaire fait référence à l'élément sur lequel vous avez cliqué au lieu de l'instance d'objet qui a créé la table. Cela rend difficile l'accès aux propriétés et aux méthodes des objets à partir du gestionnaire d'événements.

La solution : Bind ou handleEvent

Une solution à ce problème consiste à utiliser bind, qui vous permet de spécifier la valeur à utiliser comme "this" pour tous les appels à une fonction particulière. En liant la fonction de gestionnaire d'événements à l'instance d'objet, vous vous assurez que la référence "this" dans la fonction de gestionnaire reste cohérente.

Exemple d'utilisation de bind :

<code class="javascript">cell1.addEventListener("click", this.handleCellClick.bind(this), false);</code>
Copier après la connexion

Une approche alternative consiste à implémentez la fonction handleEvent, conçue pour intercepter et gérer tous les événements au sein d'un objet. En remplaçant la méthode handleEvent, vous pouvez spécifier le comportement de tous les types d'événements sur un objet.

Exemple utilisant handleEvent :

<code class="javascript">ticketTable.prototype.handleEvent = function(event) {
  if (event.type === "click") {
    console.log(this.tickets.length); // Accesses the array property
  }
};

cell1.addEventListener("click", this, false);</code>
Copier après la connexion

Suppression des écouteurs d'événement

Il est important de noter que lors de l'utilisation de bind, il peut être difficile de supprimer correctement l'écouteur d'événement. Pensez plutôt à utiliser la méthode handleEvent ou une bibliothèque tierce prenant en charge le nettoyage des écouteurs d'événements.

En résumé, l'utilisation de bind ou l'implémentation de handleEvent vous permet de contrôler la référence "this" dans les gestionnaires d'événements, vous permettant ainsi de correctement accéder aux propriétés et méthodes des objets. Un nettoyage approprié des écouteurs d'événements est également crucial pour maintenir l'efficacité de la mémoire.

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