Holen Sie sich "event" - Objekt innerhalb des sofort ausgeführten Funktion?
Ich mithilfe von Ereignis-delegation in solcher Weise:
elWraper.onclick = (function(){
//how to get here "event" object
e = e || window.event;
var t = e.target || e.srcElement;
//event handler
return function(){
//manipulations with "t" variable
}
})();
wie man "Ereignis" - Objekt innerhalb des sofort ausgeführten Funktion?
- Was ist Ihr Ziel? Sie sind eine Funktion aufrufen, die Verwendung einer Variablen
e
die nicht definiert ist (und als Ergebnis der Skript-Ausführung wird angehalten, mit einem Fehler) - warum tun Sie das, statt
addEventListener
?
Du musst angemeldet sein, um einen Kommentar abzugeben.
In standards-konforme Browser das event-Objekt ist der erste parameter an die Rückruffunktion übergeben. Im IE ist es eine Globale variable (was ist was
e = e || window.event
versucht zu bestimmen). Also, die Funktion, die Sie zurück durch dieimmediately executed function
sollte akzeptieren das event-Objekt deklariert wie die erste (und meist einzige) argument.Klärung
Da Menschen Fragen sich (und wahrscheinlich werden Sie sich Fragen, warum die OP akzeptierte diese Antwort) es gibt Anwendungen für diese, ist nicht klar aus den OP ' s Frage. Eine ist das erstellen einer closure an eine variable zu verfolgen, etwas:
dies ist die klassische Art und Weise der Zuordnung von event-Handlern in Schleifen:
Oder vielleicht die OP nur dachte, er könne 'cache' das event-Objekt, und fälschlicherweise geglaubt, er könnte dies nutzen, um es zu tun. In dem Fall, Lesen Sie meine Erklärung (anstatt nur den code) sollten aufklären der Leser, warum das wäre eine schlechte Idee.
elWraper.onclick = function(e){...}
?//misc stuff here
wie Sie einen Abschluss erstellen, um Variablen zu haben, Sie Verhalten sich wie statische Variablen oder so etwas. Es gibt Anwendungen für diese (dies ist im Grunde, wie ordnen Sie event-Handler in einer Schleife), aber es ist nicht klar, nur aus dem Lesen des OP ' s original-code.Ich denke slebetman s Antwort ist richtig laut Ihre Frage. Aber ich sehe nicht den Punkt, was Sie tun. Wenn Sie versuchen, zu abstrahieren, mit der browser-Veranstaltung, die Unterschiede, die Sie verwenden können, so etwas wie dieses.
Dann können Sie es verwenden, wie
Beachten Sie, dass Sie passieren kann nichts, da der Kontext (der "this" - Schlüsselwort in der Prozedur)
Ist es gut zu wissen, diese Dinge, aber jquery oder andere Bibliotheken bereits tun dies für Sie und es ist viel mehr getestet als die in deinem code wird immer sein, und es kümmert sich um viele weitere browser-Unterschiede, als diese kleine Funktion. Aber wenn das alles, was Sie brauchen, bedeutet dies nicht, dass sich code aufblasen nach unten.