Heres teise vähe tükk Javascript petmine et ma pidin kaevama ümber sest olukord commaned ta. Ühes oma veebilehti, mul oli see olukorras, kus ma pidin rakendama "windows.onload" kaks korda. Esimene asi, mis tuli kogenematu meeles nagu minul (ma pean ausalt ütlema, et kuna ma olen kasutanud javascript raamistike ja raamatukogud, olen forgotton teha lihtsaid asju minu enda ... kurb aga tõsi), on järgmine meetod ...
window.onload = onloadfn1;
window.onload = onloadfn2;
window.onload = onloadfn3;
jne ..
Vabandame öelda, kuid see harjumus tööd ... ei taha, et arutada täitmise teadus Javascript palju ... kuid vastavalt minu hiljutine kogemus, ainult viimane ülesanne (onloadfn3) on haige tegelikult saavad täidetud.
Tavaolukordades, erinevalt minu (kes ma rääkida veidi hiljem) ... mida võiks teha üks järgmistest täita mutliple allalaadimine toimib ....
Või midagi sellist
funktsioon doOnLoad () {
onloadfn1 ();
onloadfn2 ();
onloadfn3 ();
}
window.onload = doOnLoad;
Minu praegune olukord, ma ei saa kasutada kas eespool ...
Miks mul on vaja helistada windows.onload kaks korda, pigem seda, et helistaja 2 funktsioonid ühes allalaadimine funktsioon? Siin on kiire pilk minu probleem avaldus ...
"Mu saiti on struktureeritud nagu WordPress teema .... st on olemas ühine header.php ja footer.php mis saab kaasata kõik saiti. On allalaadimine funktsioon Toetuslepingu sisse footer.php teha mõned ühised allalaadimine ülesandeid. Ja seal on mõned leheküljed, mis vajavad midagi oma OnLoad, välja arvatud teha ühise allalaadimine funktsioon. Kui ma anda tagasikutse funktsiooni otse window.onload handler, siis üle sõita varem omistatud kutse in footer.php "
.... On minu probleem aru
?
Hästi! on vähe lahendusi, et ma ei leia. Nad kõik on väga sarnased ning peamiselt implementions lahenduse antud Simon Willison ( http://simonwillison.net/2004/May/26/addLoadEvent/ ) ...
Lahendus:
Lihtsalt lisage see javascripti kood saidi ...
funktsioon addLoadEvent (func) {
var oldonload = window.onload;
if (typeof window.onload! = 'funktsioon') {
window.onload = func
} Else {
window.onload = function () {
if (oldonload) {
oldonload ()
}
func ()
}
}
}
Ja nimetavad seda mitte tavaline "windows.onload"
addLoadEvent (FunctionToRunOnPageLoad);
addLoadEvent (function () {
/ * Rohkem koodi käivitumise leheküljel koormus *
});
Eeliseid selle koodijupi ...
1. Peamiselt See võimaldab teil on mitu windows.onload sündmused, helistas Eralda osa oma koodi, ilma overridding eelmise määratlus
2. See on tõesti märkamatu. Seda saab panna pilti oma teiste skripte või eraldi failis.
3. See toimib isegi siis, kui window.onload on juba määratud.