molily: Funktion zu windows.onload hinzufügen

Beitrag lesen

Hallo!

if(document.addEventListener){

document.addEventListener
  ('load', function() { int_sinnbild = window.setInterval("scrollSinnbild()",50); } )
}else{
  document.attachEvent
  ('load', function() { int_sinnbild = window.setInterval("scrollSinnbild()",50); } )
}


>  
> wirkt es nicht.  
  
Das load-Ereignis passiert beim window-Objekt:  
  
`window.addEventListener('load', handlerfunktion);`{:.language-javascript}  
  
Der Teil für ältere Internet Explorer benötigt die Schreibweise »onload«:  
  
`window.attachEvent('onload', handlerfunktion)`{:.language-javascript}  
  
Das sollte klappen. Im Sinne von: die Handlerfunktion sollte aufgerufen werden, wenn du den Code in einem Script platzierst, das vor dem load-Event ausgeführt wird.  
  

> Hier funktioniert beides:  
>   
> ~~~javascript
  

> if(document.addEventListener){  
>   document.addEventListener  
>   ('load', ini_google() )  
> }else{  
>   document.attachEvent  
>   ('load', ini_google() )  
> }

Das funktioniert nur scheinbar. Es macht nicht das, was du willst. Du rufst die Funktionen hierbei sofort auf. In dem Moment, wo dieser Code ausgeführt wird. Nicht erst beim load-Event! An dieser Stelle dürfen keine Klammern hinter den Funktionsnamen stehen.

Hintergrund:

JavaScript ist eine stark funktionale Sprache. Funktionen sind in JavaScript reguläre Objekte und werden in Variablen oder Objekteigenschaften gespeichert. Beim Registrieren von Event-Handlern, bei setInterval/setTimeout, bei Callbacks usw. werden Funktionen als ganz normale Parameter übergeben. Dabei notiert man einfach den Namen der Variable, in der die Funktion gespeichert ist. Der wird dann zu dem Funktionsobjekt aufgelöst. Dahinter sollte nicht der Aufruf-Operator () notiert werden!

Beispiele:

var intervalStep = function() {  
  // …  
};  
var loadHandler = function() {  
  setInterval(intervalStep, 1000); // Direktes Übergeben der Funktion  
};  
window.addEventListener('load', loadHandler); // Direktes Übergeben der Funktion

Ich vermute mal, dass der Eventlistener mit so einer "fliegenden" Funktion nicht zurecht kommt.

Doch, sollte er. Das macht keinen Unterschied, wenn der Rest richtig notiert ist.

Gibt es vielleicht eine Kurzform in der Art

window.onload = window.onload + ini_google();

Das ist eine klassische Operation der funktionalen Programmierung, aber in JavaScript gibt es dafür leider keine einfache Umsetzung. Das ginge funktional mit Closures.

window.addEventListener/attachEvent ist hier die einfachste Lösung.

Grüße,
Mathias