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 juliol 2009 a les 22:17
zPDidP Bé Gràcies És molt bonic,
29 agost 2009 a les 02:22
Això és molt net i funciona bé sense necessitat d'editar altres pàgines. Gràcies!
3 juliol 2010 a les 21:13
Va treballar meravellosament. Gràcies per compartir la seva solució vostè.
6 febrer 2011 a les 21:04
Solució Fantastic!
21 setembre 2011 a les 01:08
Moltes gràcies, això m'ajudi a resoldre el meu problema, després d'algunes nits de son a terme i una dotzena de gots de cafè d'aquest post, finalment clavat el meu problema, moltes gràcies!
30 setembre 2012 a les 09:58
window.addEventListener ('load', function () {alert ()});