2 Stimmen

Woher kommt der Parameter "event" in Javascript-Event-Handlern?

Oft sehe ich Javascript-Code, wo Event-Handler (wie onmousemove) dynamisch zugewiesen werden. Beispiel:

document.getElementById('foo').onmousemove = function(e)
{ /* do some stuff with event e */ }

Offenbar handelt es sich bei dem Parameter "e" um eine Art Ereignisobjekt. Woher kommt das, d.h. wer oder was definiert, was dieser "e"-Parameter ist, wenn die Funktion aufgerufen wird, und kann ich dies auch in statischem HTML tun? Ich meine etwa so:

<div id='foo' onmousemove='Bla(e)'> ... </div>

Was muss ich für 'e' eingeben, um das gleiche Ereignis zu erhalten? Und kann ich das auch mit weiteren Parametern kombinieren, etwa

<div id='foo' onmousemove='Bla(this,e,4)'> ... </div>

wobei e wiederum das Ereignisobjekt sein soll?

4voto

jAndy Punkte 223172

Ereignisbehandler sind definiert als callback Methoden. Ein Callback wird (daher der Ausdruck) von einem anderen Prozess zu einem späteren Zeitpunkt aufgerufen. Dies geschieht durch die Umgebung (in diesem Fall der Browser) zu dem Zeitpunkt, an dem ein Ereignis ausgelöst wird.

ruft es Ihre Callback-Funktion auf und übergibt die event object .

0voto

ControlAltDel Punkte 32085

Dies ist eine so genannte Callback-Methode. Das Ereignis wird zunächst vom Betriebssystem erstellt und an den Webbrowser gesendet, der es dann als Javascript-Ereignisobjekt an Sie weiterleitet.

0voto

Mark Tielemans Punkte 1476

Ich bin mir nicht sicher, aber ich denke, das Ereignis ist eine Objektinstanz von ActionEvent. Ich glaube nicht, dass ActionEvent manuell instanziiert werden kann, also kann man es nicht in statischem HTML tun. Selbst wenn es möglich wäre, wäre es sicherlich nicht die beste Praxis.

0voto

jbabey Punkte 44325

Das Ereignisobjekt wird gespeichert in window.event innerhalb eines Ereignis-Handlers, so dass Sie sich nicht darum kümmern müssen, dass Ihr Handler ihn als Parameter akzeptiert.

In Ihrem zweiten und dritten Beispiel ist die e wird als undefiniert übergeben, da keine Variable e in diesem Bereich existiert (es sei denn, Sie haben eine globale e ).

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X