Apelarea funcţiilor multiple de Windows onload in JavaScript
Heres un alt peice puţin de înşelăciune Javascript pe care am avut de a săpa în jurul, deoarece situaţia se commaned. Într-una din site-ul meu, am avut această situaţie în care am avut de a pune în aplicare "windows.onload" de două ori. Primul lucru pe care ar fi ajuns la o minte lipsit de experienţă ca a mea (eu trebuie să spun sincer că, din moment ce am fost cu ajutorul cadrelor javascript şi biblioteci, am uitate de a face lucruri simple, pe propria mea ... trist dar adevarat), este următoarea metodă ...
window.onload = onloadfn1; window.onload = onloadfn2; window.onload = onloadfn3; , etc ..
Ne pare rau sa spun, dar, acest lucru obiceiul de lucru ... nu vreau pentru a discuta despre stiinta executarea de Javascript mult ... dar în funcţie de experienţa mea recentă, doar ultima funcţie (onloadfn3) va bolnav se de fapt executate.
În situaţii normale, spre deosebire de a mea (pe care voi vorbi despre un pic mai târziu) ... ai putea face una dintre următoarele pentru a executa funcţiile mutliple onload ....
Sau ceva de genul asta
doOnLoad function () { onloadfn1 (); onloadfn2 (); onloadfn3 (); } window.onload = doOnLoad;
Pentru situaţia mea actuală, eu nu pot folosi oricare dintre cele de mai sus ...
De ce am nevoie pentru a apela windows.onload de două ori, mai degrabă, că de asteptare două funcţii într-o funcţie onload singur? Aici este un aspect rapid la declaraţia problema mea ...
"Paginile site-ul meu sunt structurate ca temă WordPress .... adică nu este un header.php comune şi Footer.php care devine incluse în toate paginile site-ului. Există o funcţie implementaion onload în Footer.php pentru a face unele funcţii comune onload. Şi acolo sunt câteva pagini care au nevoie de ceva de ONLOAD lor, în afară de cele făcute de funcţia de onLoad comun. Dacă aş atribui funcţie de apel invers direct la handler window.onload, se va merge pe-callback atribuite anterior în Footer.php "
.... Este problema mea a înţeles
?
Ei bine! există puţine soluţii pe care am găsit. Ele toate sunt foarte asemănătoare şi, în principal implementions de o soluţie dată de Simon Willison ( http://simonwillison.net/2004/May/26/addLoadEvent/ ) ...
Soluţie:
Pur şi simplu adăugaţi acest cod javascript pentru site-ul ...
Funcţia addLoadEvent (func) { var = oldonload window.onload; în cazul în care (typeof window.onload = "funcţie"!) { window.onload = func } Else { window.onload = function () { dacă (oldonload) { oldonload () } func () } } }Şi-l numesc în loc de "windows.onload"
addLoadEvent (FunctionToRunOnPageLoad); addLoadEvent (function () { / * Codul de mai mult pentru a rula pe pagina de încărcare * });
Avantajele acestui fragment de cod ...
1. În primul rând, Acesta vă permite să aveţi mai multe evenimente windows.onload, numit de părţi separate ale codului, fără a overridding definiţia anterioară
2. Este într-adevăr discret. Acesta poate fi plasat într-un fişier cu script-uri sau alte într-un fişier separat.
3. Ea funcţionează, chiar dacă window.onload a fost deja stabilit.










































