Maison >interface Web >js tutoriel >Pourquoi l'attribut onclick de mon script utilisateur provoque-t-il une « erreur de référence non détectée : la fonction n'est pas définie » ?

Pourquoi l'attribut onclick de mon script utilisateur provoque-t-il une « erreur de référence non détectée : la fonction n'est pas définie » ?

Susan Sarandon
Susan Sarandonoriginal
2024-11-19 06:58:02368parcourir

Why Does My Userscript's onclick Attribute Cause an

Erreur de référence non résolue : la fonction n'est pas définie avec onclick

Problème

Dans un script utilisateur, une tentative d'appel d'une fonction via un attribut onclick entraîne un Uncaught ReferenceError : la fonction n'est pas définie.

Enquête

Le comportement traditionnel de l'attribut onclick, où la fonction est définie dans le script, ne fonctionne pas dans les scripts utilisateur en raison des mécanismes de sandboxing.

Solution

Pour résoudre ce problème, utilisez toujours addEventListener() au lieu de l'attribut onclick.

Code Refactor

Remplacez l'attribut onclick par :

document.getElementById("ElementID").addEventListener("click", functionName, false);

Préoccupations supplémentaires

Écrasements du DOM et gestionnaires d'événements

Évitez d'utiliser innerHTML ou externalHTML pour écraser des éléments DOM plusieurs fois, car cela supprime les gestionnaires d'événements existants.

Identifiants uniques

Assurez-vous que chaque élément possède un identifiant unique. La réutilisation des identifiants crée des problèmes de validation.

Exemple

Dans ce code, l'attribut onclick a été remplacé par addEventListener() et le problème d'écrasement du DOM a été résolu :

for (i = 0; i < EmoteURLLines.length; i++) {
    if (checkIMG (EmoteURLLines[i])) {
        emoteTab[2].innerHTML += '<span>

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