Heim >Web-Frontend >js-Tutorial >Warum funktioniert mein JavaScript-Ereignis-Listener nicht bei dynamisch erstellten Elementen und wie kann ich das Problem mithilfe der Ereignisdelegierung beheben?

Warum funktioniert mein JavaScript-Ereignis-Listener nicht bei dynamisch erstellten Elementen und wie kann ich das Problem mithilfe der Ereignisdelegierung beheben?

DDD
DDDOriginal
2024-12-17 21:21:10139Durchsuche

Why Doesn't My JavaScript Event Listener Work on Dynamically Created Elements, and How Can I Fix It Using Event Delegation?

Dynamische Ereignisbehandlung in JavaScript

Bei der Arbeit mit Webanwendungen ist es oft notwendig, Elemente auf der Seite dynamisch zu erstellen und zu bearbeiten. Allerdings kann das Anhängen von Event-Handlern an dynamisch erstellte Elemente eine Herausforderung sein.

Das Problem

Im bereitgestellten Code-Snippet wird eine HTML-Schaltfläche dynamisch erstellt und in das DOM eingefügt . An diese Schaltfläche wird dann ein Ereignis-Listener angehängt, der Ereignis-Handler wird jedoch nicht ausgelöst, wenn auf die Schaltfläche geklickt wird.

Ereignisdelegierung

Das Problem besteht darin, dass der Ereignis-Listener wird an die Schaltfläche angehängt, bevor sie dem DOM hinzugefügt wird. Wenn die Schaltfläche dynamisch erstellt wird, wird sie später an das DOM angehängt, der Ereignis-Listener-Aufruf ist jedoch bereits erfolgt.

Eine Lösung hierfür ist die Ereignisdelegierung. Bei der Ereignisdelegierung wird ein Ereignis-Listener an ein übergeordnetes Element angehängt und nicht direkt an das Zielelement. Wenn ein Ereignis auftritt, wird das Ereignis im DOM-Baum nach oben weitergegeben, bis es das übergeordnete Element mit dem angehängten Ereignis-Listener erreicht.

Beispiel

document.addEventListener("click", function(e) {
  const target = e.target.closest("#btnPrepend"); // Or any other selector.

  if (target) {
    // Do something with `target`.
  }
});

In diesem Beispiel , wird die Methode „nest()“ verwendet, um zu bestimmen, ob das Klickereignis innerhalb des #btnPrepend-Elements oder seiner Nachkommen aufgetreten ist. Wenn ja, verweist die Zielvariable auf das Element, auf das geklickt wurde.

jQuery-Alternative

jQuery vereinfacht die Ereignisdelegierung mit der on()-Methode.

$(document).on("click", "#btnPrepend", function() {
  // Do something with `$(this)`.
});

Fazit

Ereignisdelegation bietet eine zuverlässige Methode zum Anhängen von Ereignissen Handler für dynamisch erstellte Elemente. Durch das Anhängen des Ereignis-Listeners an ein übergeordnetes Element wird sichergestellt, dass der Ereignishandler auch dann ausgelöst wird, wenn das Zielelement später zum DOM hinzugefügt wird.

Das obige ist der detaillierte Inhalt vonWarum funktioniert mein JavaScript-Ereignis-Listener nicht bei dynamisch erstellten Elementen und wie kann ich das Problem mithilfe der Ereignisdelegierung 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