Trucar a diverses funcions onload de Windows en JavaScript

Aquí està un altre petit tros de Javascript engany que havia de cavar al voltant perquè la situació commaned ella. En un dels meus llocs web, he tingut aquesta situació en què vaig haver de posar en pràctica "windows.onload" dues vegades. La primera cosa que va venir a la ment sense experiència com la meva (he de dir honestament que, des que he estat utilitzant frameworks de JavaScript i les biblioteques, he forgotton de fer les coses simples pel meu compte ... trist però cert), és el següent mètode ...

 window.onload = onloadfn1;
 window.onload = onloadfn2;
 window.onload = onloadfn3;
 etc ..

Sento dir-ho, però, això no funcionarà ... no vull parlar de la ciència de l'execució de Javascript molt ... però d'acord a la meva experiència recent, només l'última funció (onloadfn3) es malalta realment s'executen.

En situacions normals, a diferència de la meva (que vaig a parlar una mica més tard) ... es pot fer una de les següents accions per executar funcions onload mutliple ....

O alguna cosa així

 doOnLoad function () {
         onloadfn1 ();
         onloadfn2 ();
         onloadfn3 ();
 }
 window.onload = doOnLoad;

Per la meva situació actual, no puc utilitzar qualsevol dels anteriors ...
Per què he de trucar windows.onload dues vegades, en lloc que trucar dues funcions en una sola funció onload? Aquí és ràpid cop d'ull al meu plantejament del problema ...

"Els meus pàgines del lloc estan estructurats com el tema de WordPress .... és a dir, hi ha un header.php i footer.php comuns que vagi a incloure en totes les pàgines del lloc. Hi ha una funció implementaion onload en els footer.php fer algunes funcions onload comunes. I hi ha poques pàgines que necessiten una cosa pròpia onload, a part de les realitzades per la funció onload comú. Si assigno la funció de devolució de trucada directament al controlador window.onload, serà passar per sobre de les devolucions de trucada assignats prèviament al footer.php "

.... S'entén meu problema :) ?

Bé! hi ha poques solucions que vaig trobar. Tots ells són molt similars i implementions principalment en una solució donada per Simon Willison ( http://simonwillison.net/2004/May/26/addLoadEvent/ ) ...

Solució:

Només has d'afegir aquest codi javascript al lloc ...

 funció addLoadEvent (func) {
     var oldonload = window.onload;
     if (typeof window.onload! = 'funció') {
        window.onload = func
     } Else {
        window.onload = function () {
            if (oldonload) {
                   oldonload ()
           }
           func ()
        }
    }
 } 

I crida a ella en lloc de l'habitual "windows.onload"

 addLoadEvent (FunctionToRunOnPageLoad);
 (Funció addLoadEvent () {
 / * Més codi per executar en la pàgina de càrrega *
 }); 

Els avantatges d'aquest fragment de codi ...
1. Principalment, li permet disposar de múltiples esdeveniments windows.onload, anomenat a partir de peces separades del seu codi, sense overridding la definició anterior
2. És molt discreta. Es pot posar en un arxiu amb les seves altres escriptures o en un arxiu separat.
3. Funciona fins i tot si ja s'ha establert window.onload.


6 Responses to "Trucar a diverses funcions onload de Windows en JavaScript"

Deixa un comentari

NDK casa | Expressant IT | Boca Expressant | penmenship Expressant | Awe Expressant | expressar