Sie addEventListener () ruft die Funktion auf, ohne mich auch nur zu Fragen,
Also wir haben eine Seite:
<span id='container'>
<a href='#' id='first'>First Link</a>
<a href='#' id='second'>Second Link</a>
</span>
Wollen und fügen Sie einige auf Ereignisse:
first.addEventListener('click', function(){alert('sup!');})
Funktioniert wie ein Charme! Allerdings, wenn Sie das zweite argument eine externe Funktion:
function message_me(m_text){
alert(m_text)
}
second.addEventListener('click', message_me('shazam'))
Ruft es die Funktion sofort. Wie kann ich das verhindern? So ärgerlich!
Hier ein live-demo: http://jsfiddle.net/ey7pB/1/
Da der zweite parameter erwartet eine Funktion Verweis, die Sie benötigen, zur Verfügung zu stellen. Mit den problematischen code, Sie sind sofort ruft die Funktion auf und übergibt das Ergebnis (die undefined). Entweder rufen Sie die Funktion in eine anonyme Funktion (wie dein erstes Beispiel) oder ändern Sie die Funktion auf zurück eine Funktion (wahrscheinlich nicht ideal).
Warum ist das nicht ideal? Es scheint gegen D. R. Y. an copypasta meine Funktion in der 4 oder so addEventListeners, die im Einstellung, nicht?
Eine weitere option ist, um die gewünschte Nachricht als Attribut auf das element, dann binden Sie die Funktion als
Möglich, Duplikat der gewusst Wie: übergeben Sie parameter an die Funktion mit in addEventListener?
Warum ist das nicht ideal? Es scheint gegen D. R. Y. an copypasta meine Funktion in der 4 oder so addEventListeners, die im Einstellung, nicht?
Eine weitere option ist, um die gewünschte Nachricht als Attribut auf das element, dann binden Sie die Funktion als
second.addEventListener('click', message_me)
haben und es abrufen der Nachricht aus dem Attribut statt von einem parameter.Möglich, Duplikat der gewusst Wie: übergeben Sie parameter an die Funktion mit in addEventListener?
InformationsquelleAutor LittleBobbyTables | 2013-04-30
Du musst angemeldet sein, um einen Kommentar abzugeben.
Hier ist eine aktualisierte fiddle.
Ich denke, Sie sollten aktualisieren Sie Ihre Antwort akzeptiert, da die übergabe der Funktion, ohne ihn aufzurufen und zu binden - ist wahrscheinlich die bessere Wahl hier.
Können Sie erklären, warum Sie denke, zu binden, ist die bessere Wahl?
InformationsquelleAutor clav
Da der zweite parameter erwartet eine Funktion Referenz, die Sie benötigen, zur Verfügung zu stellen. Mit den problematischen code, Sie sind sofort die Funktion aufrufen, und übergeben der Ergebnis (das ist
undefined
...da die Funktion tut, istalert
wird und nicht wieder alles). Entweder rufen Sie die Funktion in eine anonyme Funktion (wie dein erstes Beispiel) oder ändern Sie die Funktion für die Rückgabe einer Funktion.Können Sie dies tun:
oder so:
DEMO: http://jsfiddle.net/tcCvw/
InformationsquelleAutor Ian
oder Sie verwenden können .binden
überprüfen MDN-Dokumentation
über 'Verschlüsse'
+1 Bindung sollte der Weg zu gehen — nicht sicher, ob das verfügbar war vor 4 Jahren, aber ist definitiv der bevorzugte Weg, um heute, im Gegensatz zur Schaffung einer anonymen Funktion
Schöne Anregung für die Bindung, auf jeden Fall sollte die akzeptierte Antwort. Kann OP ändern?
InformationsquelleAutor Sehyun Kim