Heim  >  Artikel  >  Web-Frontend  >  Warum ist meine „onclick'-Funktion in einem Benutzerskript undefiniert und wie kann ich sie mithilfe von Ereignis-Listenern beheben?

Warum ist meine „onclick'-Funktion in einem Benutzerskript undefiniert und wie kann ich sie mithilfe von Ereignis-Listenern beheben?

Patricia Arquette
Patricia ArquetteOriginal
2024-11-23 01:53:11303Durchsuche

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

Uncaught ReferenceError: Function is Not Defined with onclick

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 Problem

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

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.

Ereignis-Listener implementieren

Um Ereignis-Listener zu implementieren, befolgen Sie diese Schritte:

Ersetzen Sie onclick durch Ereignis-Listener

Stattdessen Wenn Sie Onclick-Attribute verwenden möchten, ersetzen Sie diese durch addEventListener():

<span>
document.getElementById("mySpan").addEventListener("click", myFunction, false);

Daten mit Datenattributen übergeben

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

Emote-Funktion anhängen

function appendEmote(zEvent) {
    var emoteUsage = this.getAttribute("data-usage");
    shoutdata.value += emoteUsage;
}

Zusätzlich Warnungen

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!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn