Trucar a múltiples funcions de Windows onload en Javascript
Aquí està un altre tros petit d'engany Javascript que havia de cavar al seu voltant perquè la situació ho commaned. 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 al cap una experiència com la meva (he de dir honestament que, des que he estat utilitzant frameworks de JavaScript i les biblioteques, he oblidat 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 ..
Em sap greu dir-ho, però, aquest treball costum ... no vull parlar sobre la ciència execució de Javascript molt ... però d'acord a la meva experiència recent, només l'última funció (onloadfn3) la mala voluntat s'executa realment.
En situacions normals, a diferència de la meva (que vaig a parlar una mica més tard) ... pots fer el següent per executar funcions mutliple onload ....
O alguna cosa com això
doOnLoad function () { onloadfn1 (); onloadfn2 (); onloadfn3 (); } window.onload = doOnLoad;
Per la meva situació actual, no pot utilitzar qualsevol dels anteriors ...
Per què he de trucar a windows.onload dues vegades, en lloc de trucar a dues funcions dins d'una funció onload sola? Aquí és ràpida ullada a la meva declaració del problema ...
"Els meus pàgines del lloc s'estructura com el tema de WordPress .... és a dir, hi ha un header.php i footer.php comuns que s'inclouen en totes les pàgines del lloc. Hi ha una funció de la Implementació onload en els footer.php per fer algunes funcions comunes onload. I hi ha poques pàgines que necessiten una mica de la seva pròpia onload, a més dels realitzats per la funció onload comú. Si assigno funció de callback directament al controlador window.onload, serà passar per sobre de les devolucions de trucada assignats prèviament en els footer.php "
.... S'entén el meu problema
?
Bé! hi ha poques solucions que es va trobar. Tots ells són molt similars i sobretot implementions d'una solució donada per Simon Willison ( http://simonwillison.net/2004/May/26/addLoadEvent/ ) ...
Solució:
Només cal afegir el codi javascript per al lloc ...
funció de addLoadEvent (func) { var oldonload = window.onload; if (typeof window.onload! = 'function') { window.onload = funció Else {} window.onload = function () { if (oldonload) { oldonload () } func () } } }I en diuen en lloc de l'habitual "windows.onload"
addLoadEvent (FunctionToRunOnPageLoad); addLoadEvent (function () { / * Més codi s'executi en càrrega de la pàgina * });
Els avantatges d'aquest fragment de codi ...
1. En primer lloc, que li permet disposar de múltiples esdeveniments windows.onload, anomenada a partir de peces separades del seu codi, sense anul · lant la definició anterior
2. És molt discret. Es pot col · locar en un arxiu amb les seqüències d'ordres d'altres o en un arxiu separat.
3. Funciona fins i tot si window.onload ja s'ha establert.










































