Maison > interface Web > js tutoriel > Pourquoi ma fonction « onclick » n'est-elle pas définie dans un script utilisateur et comment puis-je la corriger à l'aide d'écouteurs d'événements ?

Pourquoi ma fonction « onclick » n'est-elle pas définie dans un script utilisateur et comment puis-je la corriger à l'aide d'écouteurs d'événements ?

Patricia Arquette
Libérer: 2024-11-23 01:53:11
original
412 Les gens l'ont consulté

Why is my `onclick` function undefined in a userscript, and how can I fix it using event listeners?

Uncaught ReferenceError : la fonction n'est pas définie avec onclick

Lors d'une tentative de création d'un script d'émoticône personnalisé pour un site Web, un problème est survenu entraînant l'erreur "Uncaught ReferenceError : la fonction n'est pas définie avec onclick."

Le problème

Le script contenait balises span avec des attributs onclick qui appellent des fonctions. Cependant, lorsque ces boutons étaient cliqués, les fonctions n'étaient pas reconnues.

La solution

La solution consiste à éviter l'utilisation des attributs onclick des scripts utilisateur, car ils fonctionnent dans un environnement sandbox séparé à partir de la portée de la page cible. À la place, des écouteurs d'événements doivent être utilisés.

Implémentation des écouteurs d'événements

Pour implémenter des écouteurs d'événements, suivez ces étapes :

Remplacez onclick par des écouteurs d'événements

À la place d'utiliser les attributs onclick, remplacez-les par addEventListener() :

<span>
Copier après la connexion
Copier après la connexion
document.getElementById("mySpan").addEventListener("click", myFunction, false);
Copier après la connexion

Transmettre des données avec des attributs de données

Comme nous ne pouvons pas transmettre directement des données aux écouteurs d'événements, nous pouvons utiliser des attributs de données :

<span>
Copier après la connexion
Copier après la connexion
targetSpans = emoteTab[2].querySelectorAll("span[data-usage]");
for (var J in targetSpans) {
    targetSpans[J].addEventListener("click", appendEmote, false);
}
Copier après la connexion

Ajouter une fonction Emote

function appendEmote(zEvent) {
    var emoteUsage = this.getAttribute("data-usage");
    shoutdata.value += emoteUsage;
}
Copier après la connexion

Supplémentaire Avertissements

1. Identifiants uniques :

Assurez-vous que chaque identifiant n'est utilisé qu'une seule fois par page. L'utilisation d'identifiants en double n'est pas valide.

2. Suppression du gestionnaire d'événements :

L'utilisation de .outerHTML ou .innerHTML supprimera les gestionnaires d'événements existants. Soyez prudent lorsque vous utilisez ces méthodes.

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