Beim Versuch, ein benutzerdefiniertes Emote-Skript für eine Website zu erstellen, trat ein Problem auf, das zum Fehler „Uncaught ReferenceError“ führte : Funktion ist nicht mit onclick definiert.“
Das Skript enthielt span Tags mit Onclick-Attributen, die Funktionen aufrufen. Beim Klicken auf diese Schaltflächen wurden die Funktionen jedoch nicht erkannt.
Die Lösung besteht darin, die Verwendung von Onclick-Attributen aus Benutzerskripten zu vermeiden, da diese in einer separaten Sandbox-Umgebung arbeiten aus dem Zielseitenbereich. Stattdessen sollten Ereignis-Listener verwendet werden.
Um Ereignis-Listener zu implementieren, befolgen Sie diese Schritte:
Stattdessen Wenn Sie Onclick-Attribute verwenden möchten, ersetzen Sie diese durch addEventListener():
<span>
document.getElementById("mySpan").addEventListener("click", myFunction, false);
Da wir Daten nicht direkt an Ereignis-Listener übergeben können, können wir Datenattribute verwenden:
<span>
targetSpans = emoteTab[2].querySelectorAll("span[data-usage]"); for (var J in targetSpans) { targetSpans[J].addEventListener("click", appendEmote, false); }
function appendEmote(zEvent) { var emoteUsage = this.getAttribute("data-usage"); shoutdata.value += emoteUsage; }
1. Eindeutige IDs:
Stellen Sie sicher, dass jede ID nur einmal pro Seite verwendet wird. Die Verwendung doppelter IDs ist ungültig.
2. Entfernen von Ereignishandlern:
Durch die Verwendung von .outerHTML oder .innerHTML werden vorhandene Ereignishandler entfernt. Seien Sie vorsichtig, wenn Sie diese Methoden anwenden.
Das obige ist der detaillierte Inhalt vonWarum ist meine „onclick'-Funktion in einem Benutzerskript undefiniert und wie kann ich sie mithilfe von Ereignis-Listenern beheben?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!