Heim > Web-Frontend > js-Tutorial > Warum ruft „addEventListener' meine Funktion sofort auf und nicht bei einem Ereignisauslöser?

Warum ruft „addEventListener' meine Funktion sofort auf und nicht bei einem Ereignisauslöser?

Linda Hamilton
Freigeben: 2024-12-13 15:16:10
Original
584 Leute haben es durchsucht

Why Does `addEventListener` Call My Function Immediately Instead of on Event Trigger?

„addEventListener ruft die Funktion ohne Eingabeaufforderung auf“ erklärt

Wenn Sie einen Ereignis-Listener an ein Element anhängen, möchten wir, dass die Funktion nur ausgeführt wird, wenn das Ereignis eintritt. In manchen Fällen kann es jedoch schwierig sein, sicherzustellen, dass die Funktion nicht vorzeitig aufgerufen wird.

Bedenken Sie den folgenden HTML-Code:

<span>
Nach dem Login kopieren

Wir möchten dem ein Klickereignis hinzufügen zweiter Link:

second.addEventListener('click', message_me('shazam'));
Nach dem Login kopieren

wobei „message_me“ eine externe Funktion ist, die eine Nachricht anzeigt. Überraschenderweise löst dieser Code die Funktion „message_me“ sofort aus, noch bevor wir auf den zweiten Link klicken.

Das Problem

Das Problem liegt in der Art und Weise, wie JavaScript mit Funktionsreferenzen umgeht als zweites Argument von 'addEventListener'. JavaScript erwartet einen Verweis auf eine Funktion, aber im problematischen Code wird die Funktion „message_me('shazam')“ sofort aufgerufen und stattdessen ihr Ergebnis übergeben.

Die Lösung

Es gibt zwei Möglichkeiten, dieses Problem zu lösen:

  • Erstellen Sie eine anonyme Funktion: Wickeln Sie „message_me“ in eine anonyme Funktion ein, um eine Funktionsreferenz zurückzugeben:
second.addEventListener('click', function() {
    message_me('shazam');
});
Nach dem Login kopieren

Diese Lösung stellt sicher, dass „message_me“ nur aufgerufen wird, wenn auf den zweiten Link geklickt wird.

  • Eine Funktion von „message_me“ zurückgeben: Ändern Sie „message_me“, um eine Funktion zurückzugeben Referenz:
function message_me(m_text) {
    return function() {
        alert(m_text);
    };
}

second.addEventListener('click', message_me('shazam'));
Nach dem Login kopieren

In diesem Fall erhält 'addEventListener' eine Referenz auf eine Funktion, die ausgeführt wird, wenn das Klickereignis auftritt.

Das obige ist der detaillierte Inhalt vonWarum ruft „addEventListener' meine Funktion sofort auf und nicht bei einem Ereignisauslöser?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Quelle:php.cn
Erklärung dieser Website
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
Neueste Artikel des Autors
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage