Heres en annan liten lappa av Javascript knep som jag var tvungen att gräva runt eftersom situationen commaned det. I en av mina webbplatser, hade jag denna situation där jag var tvungen att genomföra "windows.onload" två gånger. Det första som skulle kom till en oerfaren sinne som mitt (Jag måste ärligt säga att eftersom jag har använt JavaScript-ramverk och bibliotek, har jag forgotton att göra enkla saker på egen hand ... sorgligt men sant), är följande metod ...
window.onload = onloadfn1;
window.onload = onloadfn2;
window.onload = onloadfn3;
etc. ..
Ledsen att säga men, brukar detta arbete ... inte vill diskutera genomförandet vetenskapen av Javascript mycket ... men enligt min senaste erfarenhet, (onloadfn3) endast den sista funktionen faktiskt sjuk får avrättas.
I normala fall, till skillnad från min (som jag ska tala om lite senare) ... du kan göra något av följande för att utföra mutliple onload funktion ....
Eller nåt här
Funktionen doOnLoad () {
onloadfn1 ();
onloadfn2 ();
onloadfn3 ();
}
window.onload = doOnLoad;
För min nuvarande situation, kan jag inte använda någon av ovanstående ...
Varför måste jag ringa windows.onload två gånger, snarare att ringa två funktioner i en enda onload funktion? Här är snabb titt på mitt problem uttalande ...
"Mina sajtens sidor är uppbyggda likt WordPress temat .... dvs det finns en gemensam header.php och footer.php som får ingå i alla webbplatsens sidor. Det finns en onload funktion implementering i footer.php att göra några vanliga onload funktioner. Och det finns få sidor som behöver något eget OnLoad, bortsett från dem som gjorts av vanliga onload funktion. Om jag tilldelar callback-funktion direkt till window.onload handler, kommer den att över-rider som tidigare tilldelats återbesök i footer.php "
.... Är mitt problem förstås
?
Tja! det finns få lösningar som jag hittade. De är alla mycket lika och i huvudsak implementions en lösning som ges av Simon Willison ( http://simonwillison.net/2004/May/26/addLoadEvent/ ) ...
Lösning:
Helt enkelt lägga till den här JavaScript-kod till plats ...
Funktionen addLoadEvent (FUNC) {
var oldonload = window.onload;
if (typeof window.onload! = 'funktion') {
window.onload = funktion
} Else {
window.onload = function () {
if (oldonload) {
oldonload ()
}
FUNC ()
}
}
}
Och kallar det istället för den vanliga "windows.onload"
addLoadEvent (FunctionToRunOnPageLoad);
addLoadEvent (function () {
/ * Mer kod körs när sidan laddas *
});
Fördelar med detta kodsträng ...
1. I första hand låter den du har flera windows.onload händelser, anropas från separata delar av din kod, utan overridding den tidigare definitionen
2. Det är verkligen diskret. Den kan placeras i en fil med dina andra skript eller i en separat fil.
3. Det fungerar även om window.onload redan har ställts in.