peterS.: Was ist ein Event-Handler und wie erzeuge ich eigene Events?

Beitrag lesen

gruss Ahnungsloser, hallo in die runde,

In der Literatur werden Attribute wie onclick als Event-Handler
bezeichnet. Müßte man aber nicht richtigerweise die von onclick
eigentlich aufgerufene Funktion als Event-Handler bezeichnen?

das "event listening / event handling" ist ein mehrschichtiges
abstraktionsmodell, das sich mit einem einzigen griffigen wort
nur schwer beschreiben laesst. das wird wohl der grund dafuer,
sein, dass "event handling" in der literatur bevorzugung erfaehrt

die basis jeden "event handling"s bildet ein [[EventTarget]]-
objekt. das ist jenes objekt, auf dem events an- und abgemeldet
werden und das ebenjene events auch aussenden (*werfen*) kann.

die folgenden, gerade in beschreibenden worten angerissenen
methoden muessen z.b. in den aktuellen (DOM-)implementierungen
mehr oder weniger so umgesetzt sein:

[EventTarget].addEventListener = (function (type, handler) {...});  
[EventTarget].removeEventListener = (function (type, handler) {...});  
[EventTarget].dispatchEvent = (function (evt) {...});

beim anmelden wird fuer [EventTarget] ein [[EventListener]]-
objekt erzeugt, welches sich ueber den string-value "type"
und seinen funktionalen parameter "handler" identifiziert.
dabei representiert erstgenanntes argument den "event type"
also den *identifier*, das *label*, den *namen* unter dem
sich letztgenannte methode ueber genau diesen [EventListener]
adressieren laesst.

d.h.: auf einem [EventTarget] koennen mehrere aber trotzdem
verschiedene [EventListener] unter gleichem namen bzw. typ
angemeldet werden.

der [EventListener] wiederum kapselt ein [[Event]]-objekt
und stellt eine methode [handleEvent] bereit, die fuer
[EventTarget] *sichtbar* ist und von dessen [dispatchEvent]-
methode genutzt wird.

[Event] ist die ebene der geringsten abstraktion. diese objekte
kapseln unter anderem referenzen auf "target" und "type", wobei
"target" der dazugehoerigen [EventTarget]-referenz und "type"
dem "event type" entspricht. ueber diese kontrollinstanz laesst
sich eine versehentliche und/oder missbraeuchliche manipulation
des event-objekts ueber die [dispatchEvent]-methode eines
[EventTarget]s verhindern.

Aber wie kann man dann onclick bezeichnen?

[HTMLElement].onclick = (function () {...}); laesst sich als
direkte referenz auf eine funktion, also als ein "event handler"
lesen, ...

... dafuer gibt es bei ...

[HTMLElement].addEventListenr("click", [anonyme funktion oder referenz (*1)], [false|true]);

... dann den intern ueber [EventListener] referenzierten [onclick]-
handler (*1), waehrend "click" hier nur den "event type" oder auch
den "event listener identifier" bzw. das "event listener label"
markiert.

die beiden beispiele unterscheiden sich darin, dass zuletzt
aufgefuehrtes anmeldung und ausfuehrung mehrerer (event-)handler
auf einem event(-typ) zulaesst. ersteres buegelt gnadenlos immer
den zuletzt referenzierten event-handler ueber die bis dato
gueltige referenz drueber.

"event handler" ist also keineswegs falsch, auch nicht ungenau,
sondern einfach zutreffend.

siehe auch meinereinigen kurzen forumsmonolog zu:

custom events/[EventDispatcher] fuer nicht-DOM-objekte?

... und hier noch etwas *quaelcode* zum gucken und rumspielen:

http://www.pseliger.de/jsExtendedApi/jsApi.EventDispatcher.dev.js

http://www.pseliger.de/jsExtendedApi/jsApi.EventDispatcher.hybrid.js
http://www.pseliger.de/jsExtendedApi/jsApi.EventDispatcher.js

http://www.pseliger.de/jsExtendedApi/jsApi.EventDispatcher.dev.html

so long - peterS. - pseliger@gmx.net

--
»Because objects in JavaScript are so flexible, you will want to think differently about class hierarchies.
Deep hierarchies are inappropriate. Shallow hierarchies are efficient and expressive.« - Douglas Crockford
ie:( fl:) br:> va:( ls:& fo:) rl:| n3;} n4:} ss:} de:µ js:} mo:? zu:]