molily: Frage zu einem Script, das mehrere Javascripte verknüpft

Beitrag lesen

Hallo,

function addEvent(obj, evType, fn){

if (obj.addEventListener){
   obj.addEventListener(evType, fn, false);
   return true;
} else if (obj.attachEvent){
   var r = obj.attachEvent("on"+evType, fn);
   return r;
} else {
   return false;
}
}
addEvent(window, 'load', LadeInfo);
addEvent(window, 'load', setup);


>   
> In wie fern eignet sich dieses Script?  
  
Kommt auf den Zweck an.  
  
Zuerst hast du hier ein Script gepostet, was mehrere Funktion beim onload ausführen soll. Das Prinzip kann man natürlich ausdehnen, aber dessen Einsatzbereich ist erst einmal begrenzt.  
  
Das obige Script ist für jedes Event-Handling gedacht. Es ist durchaus tauglich für gewisse Anwendungen. Es hat aber einige Probleme, die dazu geführt haben, dass es einen [Wettbewerb zur Überarbeitung](http://www.quirksmode.org/blog/archives/2005/09/addevent_recodi.html) gab.  
  
Für mich ist das wirklich schwerwiegende Problem bei der obigen Vorgehensweise, dass bei der Verwendung von attachEvent die Handler-Funktion nicht im Kontext des Elementobjektes ausgeführt wird, an dem es hängt. Das kann man aber einfach umgehen durch eine Closure und einem ausdrücklichen Kontextwechsel mit [call](http://developer.mozilla.org/en/docs/Core_JavaScript_1.5_Reference:Objects:Function:call):  
  
`.attachEvent(..., function () { fn.call(obj); } )`{:.language-javascript}  
  
Darüber hinaus hat man u.U. weitere Anforderungen, die obige Funktion nicht abdeckt, z.B. das Entfernen von Handlern und das Nivellieren von anderen IE-Unzulänglichkeiten. Zu diesem Zweck gibt es natürlich fünfhundert Scripte, und die bekannten Bibliotheken jQuery, Prototype, Yahoo UI usw. bringen selbst sehr ausgereiftes Event-Handling mit. Für den Alltagsgebrauch, wenn man keine große Bibliothek verwendet, reicht aber auch [Dean Erwards Script](http://dean.edwards.name/my/events.js).  
  
[John Resigs addEvent](http://ejohn.org/projects/flexible-javascript-events/) hatte zwar den Wettbewerb gewonnen, aber es hat [ein kleines Problem](http://my.opera.com/hallvors/blog/show.dml/1665828), weshalb ich für es ziemlich problematisch halte.  
  
Mathias

-- 
[SELFHTML aktuell Weblog](http://aktuell.de.selfhtml.org/weblog/)