De meesten van jullie weten waarschijnlijk wel eea van event-handling in JS, en van de verschillende event-models.
Zo heb je de DOM level 0 method die werkt in bijna alle browsers:
of inline:
Nadeel van deze methode is dat je dynamisch maar 1 handler per object/event type kan opgeven.
Daarnaast heb je de DOM level 2 method die werkt in recente standards-compliant browsers:
Deze methode ondersteund naast event bubbling ook event capturing, maar grootste nadeel is dat het niet werkt in non-standards compliant browsers (zoals Internet Explorer).
Internet Explorer zou niet van Microsoft zijn als het niet een eigen propriety event model zou hebben; ik noem dat het IE5 event model:
Het grootste nadeel van het IE5 event model is dat de functie (handler) niet wordt uitgevoerd in de scope van het element waar het event op plaatsvond, maar binnen de scope van het window object. Het is dus niet mogelijk te achterhalen welk element precies het event triggerde. In de voorgaande 2 modellen kan dat wel dmv het 'this' keyword.
Nog een ander nadeel van dit model is dat de functies niet in volgorde van toekenning worden uitgevoerd, maar (volgens MSDN) in 'random' order - in de praktijk blijkt dat de laatst toegekende handler als eerste wordt aangeroepen itt de executie-volgorde van addEventListener.
Daarnaast ondersteund het IE5 model geen event capturing (maar dat is van minder geschikt belang in de meeste situaties).
Nu heeft Scott Andrew al in 2001 een wrapper geschreven waarmee je cross-browser eventhandlers kan toekennen aan elementen. Anno 2005 komt PPK er achter dat deze methode toch wel wat nadelen heeft, voornamelijk mbt de scope waarin de handlers worden uitgevoerd. een beetje JS-devver wist dat natuurlijk allang en heeft nooit omgekeken naar de methode van Scott Andrew
Anyway, PPK heeft aan de hand van de comments op zijn verhaal bedacht dat het tijd was voor een contest: herschrijf add/removeEvent dusdanig dat het de meeste tekortkomingen opheft.
Ik heb uiteraard al een entry gemaakt (zie ook de comments), maar wellicht zijn er hier nog mensen die het beter kunnen
In ieder geval biedt PPK geen ruimte voor discussie, dus dat kan dan mooi hier
Zo heb je de DOM level 0 method die werkt in bijna alle browsers:
JavaScript:
1
| element.onevent = function; |
of inline:
HTML:
1
| <element onevent="function()"> |
Nadeel van deze methode is dat je dynamisch maar 1 handler per object/event type kan opgeven.
Daarnaast heb je de DOM level 2 method die werkt in recente standards-compliant browsers:
JavaScript:
1
| element.addEventListener(eventType, function, useCapture); |
Deze methode ondersteund naast event bubbling ook event capturing, maar grootste nadeel is dat het niet werkt in non-standards compliant browsers (zoals Internet Explorer).
Internet Explorer zou niet van Microsoft zijn als het niet een eigen propriety event model zou hebben; ik noem dat het IE5 event model:
JavaScript:
1
| object.attachEvent('on' + eventType, function); |
Het grootste nadeel van het IE5 event model is dat de functie (handler) niet wordt uitgevoerd in de scope van het element waar het event op plaatsvond, maar binnen de scope van het window object. Het is dus niet mogelijk te achterhalen welk element precies het event triggerde. In de voorgaande 2 modellen kan dat wel dmv het 'this' keyword.
Nog een ander nadeel van dit model is dat de functies niet in volgorde van toekenning worden uitgevoerd, maar (volgens MSDN) in 'random' order - in de praktijk blijkt dat de laatst toegekende handler als eerste wordt aangeroepen itt de executie-volgorde van addEventListener.
Daarnaast ondersteund het IE5 model geen event capturing (maar dat is van minder geschikt belang in de meeste situaties).
Nu heeft Scott Andrew al in 2001 een wrapper geschreven waarmee je cross-browser eventhandlers kan toekennen aan elementen. Anno 2005 komt PPK er achter dat deze methode toch wel wat nadelen heeft, voornamelijk mbt de scope waarin de handlers worden uitgevoerd. een beetje JS-devver wist dat natuurlijk allang en heeft nooit omgekeken naar de methode van Scott Andrew
Anyway, PPK heeft aan de hand van de comments op zijn verhaal bedacht dat het tijd was voor een contest: herschrijf add/removeEvent dusdanig dat het de meeste tekortkomingen opheft.
Ik heb uiteraard al een entry gemaakt (zie ook de comments), maar wellicht zijn er hier nog mensen die het beter kunnen
In ieder geval biedt PPK geen ruimte voor discussie, dus dat kan dan mooi hier
[ Voor 15% gewijzigd door crisp op 10-09-2005 02:12 ]
Intentionally left blank