Wie übergibt man Argumente an addEventListener () - listener-Funktion?
Ist die situation etwas wie-
var someVar = some_other_function();
someObj.addEventListener("click", function(){
some_function(someVar);
}, false);
Das problem ist, dass der Wert someVar
ist nicht sichtbar in der listener-Funktion der addEventListener
wo es wahrscheinlich wird behandelt, als eine neue variable.
InformationsquelleAutor der Frage Abhishek Yadav | 2008-11-02
Du musst angemeldet sein, um einen Kommentar abzugeben.
Es gibt absolut nichts falsch mit dem code, den Sie geschrieben haben. Beide
some_function
undsomeVar
zugänglich sein sollten, im Falle Sie wurden in dem Kontext, in dem anonymeerstellt wurde.
Überprüfen Sie, ob der Alarm gibt Ihnen den Wert, den Sie gesucht haben, sicher sein, es wird zugänglich sein, im Rahmen der anonymen Funktion (es sei denn, Sie haben mehr code, der arbeitet nach dem gleichen
someVar
variable neben dem AufrufaddEventListener
)InformationsquelleAutor der Antwort Sergey Ilinsky
Warum nicht einfach die Argumente aus dem target-Attribut des Ereignisses?
Beispiel:
JavaScript ist eine Prototyp-orientierte Sprache, denken Sie daran!
InformationsquelleAutor der Antwort Zaloz
Diese Frage ist alt, aber ich dachte, ich würde eine alternative bieten mit ES5 .bind() - für die Nachwelt. 🙂
Nur bewusst sein, dass Sie brauchen, um Ihre listener-Funktion mit dem ersten Parameter als argument übergeben haben, in bind (deine andere Funktion) und der zweite Parameter ist jetzt der Fall (anstelle des ersten, wie es gewesen wäre).
InformationsquelleAutor der Antwort Brian Moore
Können Sie hinzufügen und entfernen eventlisteners mit Argumenten durch die Deklaration einer Funktion als variable.
myaudio.addEventListener('ended',funcName=function(){newSrc(myaudio)},false);
newSrc
ist die Methode, mit myaudio als parameterfuncName
ist der name der Funktion die variableKönnen Sie den listener mit
myaudio.removeEventListener('ended',func,false);
InformationsquelleAutor der Antwort Ganesh Krishnan
Recht und alte Frage, aber ich hatte das gleiche Problem heute. Sauberste Lösung, die ich fand, ist die Verwendung des Begriffs der currying.
Code:
Durch die Benennung der Curry-Funktion, die es erlaubt, Sie zu Anruf-Objekt.removeEventListener um die Registrierung der eventListener zu einem späteren Zeitpunkt der Ausführung.
InformationsquelleAutor der Antwort tomcek112
Könnte passieren somevar Wert(nicht durch Verweis) über eine javascript-feature, bekannt als Verschluss:
Oder Sie schreiben könnten, einen gemeinsamen wrap-Funktion wie
wrapEventCallback
:Hier
wrapEventCallback(func,var1,var2)
ist wie:InformationsquelleAutor der Antwort ahui
someVar
Wert sollte nur zugegriffen werden, insome_function()
Kontext, nicht vom Hörer.Wenn Sie möchten, um es innerhalb listener, müssen Sie etwas tun, wie:
und verwenden
newVar
statt.Der andere Weg ist, um zurück
someVar
Wert vonsome_function()
für mit es weiter im Hörer (wie eine neue lokale var):InformationsquelleAutor der Antwort Thevs
Hier ist noch ein weiterer Weg (Dieser arbeitet im inneren for-Schleifen):
InformationsquelleAutor der Antwort Hello World
Verwenden
Und wenn Sie möchten, übergeben Sie einen benutzerdefinierten Wert in dieser anonymen Funktion wird dann der einfachste Weg dies zu tun ist
Funktioniert perfekt in mein Projekt. Hoffe das hilft
InformationsquelleAutor der Antwort kta
Können Sie einfach binden Sie alle notwendigen Argumente mit 'binden':
Auf diese Weise erhalten Sie immer die Veranstaltung, arg1, und andere Sachen übergeben myPrettyHandler.
http://passy.svbtle.com/partial-application-in-javascript-using-bind
InformationsquelleAutor der Antwort Oleksandr Tkalenko
Versuchen, auch diesen (IE8 + Chrome. Ich weiß nicht, für FF):
Hoffe, es ist kein Tippfehler 🙂
InformationsquelleAutor der Antwort DMike92
Einer Art und Weise tut Sie dies mit einer äußeren Funktion:
Dieser Methode Verpacken Sie eine anonyme Funktion, die in Klammern und ruft es sofort heißt IIFE (Sofort-Invoked Function Expression)
Können Sie überprüfen, ein Beispiel mit zwei Parametern in http://codepen.io/froucher/pen/BoWwgz.
InformationsquelleAutor der Antwort Felipe
Funktion.der Prototyp.bind() ist die Art und Weise zu binden, eine Ziel-Funktion, die einem bestimmten Bereich und Optional definieren Sie die
this
Objekt innerhalb der Ziel-Funktion.Oder zu erfassen einige der lexikalischen Bereich, z.B. in einer Schleife:
Schließlich, wenn die
this
parameter ist nicht erforderlich, innerhalb der Ziel-Funktion:InformationsquelleAutor der Antwort eclos
Senden-Argumente für eine eventListener-callback-Funktion benötigt die Schaffung einer isolierten Funktion und übergeben von Argumenten an, dass isolierte Funktion.
Hier ist eine nette kleine helper-Funktion, die Sie verwenden können. Basiert auf "Hallo Welt" - Beispiel oben.)
Eine Sache, die auch erforderlich ist, dass die Referenz auf die Funktion, so können wir den listener entfernen sauber.
InformationsquelleAutor der Antwort bob
Ich steckte in dieser, wie ich es in einer Schleife zum suchen von Elementen und das hinzufügen von listner. Wenn Sie es in eine Schleife, dann funktioniert das perfekt
InformationsquelleAutor der Antwort Suneel Kumar
InformationsquelleAutor der Antwort Gennadiy Sherbakha
Folgende Antwort ist richtig, aber der code unten funktioniert nicht im IE8, wenn angenommen, Sie komprimierte js-Datei mit yuicompressor. (In der Tat,noch die meisten der US-Völker mit IE8)
So können wir beheben, das oben genannte Problem wie folgt und es funktioniert in allen Browsern
Hoffnung, es würde nützlich sein, für jemanden, der die Komprimierung der js-Datei in der Produktionsumgebung.
Glück!!
InformationsquelleAutor der Antwort Asik
Gibt es eine spezielle variable in allen Funktionen: Argumente. Sie können die Parameter übergeben, die als anonyme Parameter und Zugang zu Ihnen (Auftrag) durch die Argumente variable.
Beispiel:
InformationsquelleAutor der Antwort StanE
Folgende code funktioniert für mich (firefox):
Ausgabe:
InformationsquelleAutor der Antwort Šerg
Benötigen Sie:
InformationsquelleAutor der Antwort Victor Behar
Andere alternative, vielleicht nicht so elegant wie die Verwendung von binden, aber es ist gültig für Ereignisse, die in einer Schleife
Es wurde getestet für google chrome-Erweiterungen und vielleicht e.srcElement muss ersetzt werden durch e.Quelle in anderen Browsern
Fand ich diese Lösung mit den Kommentar geschrieben von Imatoria aber ich kann nicht markieren Sie es als nützlich, weil ich nicht genug ansehen 😀
InformationsquelleAutor der Antwort fhuertas