So haben wir eine Seite:addEventListener ruft die Funktion, ohne dass ich es zu
<span id='container'>
<a href='#' id='first'>First Link</a>
<a href='#' id='second'>Second Link</a>
</span>
Und wollen einige Klick-Ereignisse hinzuzufügen:
first.addEventListener('click', function(){alert('sup!');})
wirkt wie ein Zauber! Jedoch, wenn Sie das zweite Argument eine externe Funktion machen:
Es ruft die Funktion sofort auf. Wie kann ich das stoppen? So nervig!
Hier ist eine Live-Demo: http://jsfiddle.net/ey7pB/1/
Da der zweite Parameter eine Funktion ** reference ** erwartet, müssen Sie eine angeben. Mit Ihrem problematischen Code rufen Sie sofort die Funktion auf und übergeben ihr Ergebnis (was * undefiniert * ist). Entweder rufen Sie die Funktion in einer anonymen Funktion auf (wie in Ihrem ersten Beispiel) oder ändern Sie die Funktion, um eine Funktion ** zurückzugeben ** (wahrscheinlich nicht ideal). – Ian
Warum ist das nicht ideal? Es scheint gegen D.R.Y. um meine Funktion in den 4 oder so addEventListeners zu kopieren, die im Setting sind, nein? – LittleBobbyTables
Eine weitere Option besteht darin, die erforderliche Nachricht als Attribut für das Element zu speichern, dann die Funktion als 'second.addEventListener ('click', message_me) 'zu binden und die Nachricht vom Attribut und nicht von einem Parameter abrufen zu lassen. – nnnnnn