js window.onload 加載多個函數和追加函數

平時做項目經常需要使用window.onload,

用法如下:

functionfunc(){alert("thisiswindowonloadevent!");return;}

window.onload=func;

或者如下:

window.onload=function(){alert("thisiswindowonloadevent!");return;}

但window.onload不能同時加載多個函數。

比如:
functiont(){
alert("t")
}
functionb(){
alert("b")
}
window.onload=t;
window.onload=b;
後面會把前面的覆蓋,上面代碼只會輸出b。

此時可用如下方法解決:

window.onload=function(){t();b();}

另一種解決方法如下:

複製代碼
ContractedBlock.gifExpandedBlockStart.gif代碼
functionaddLoadEvent(func){
varoldonload=window.onload;//得到上一個onload事件的函數
if(typeofwindow.onload!='function'){//判斷類型是否爲'function',注意typeof返回的是字符串
window.onload=func;
}
else{
window.onload
=function(){
oldonload();
//調用之前覆蓋的onload事件的函數---->由於我對js瞭解不多,這裏我暫時理解爲通過覆蓋onload事件的函數來實現加載多個函數
func();//調用當前事件函數
}
}
}

//(完整示例)使用如下:

functiont(){
alert(
"t")
}
functionb(){
alert(
"b")
}
functionc(){
alert(
"c")
}
functionaddLoadEvent(func){
varoldonload=window.onload;
if(typeofwindow.onload!='function'){
window.onload
=func;
}
else{
window.onload
=function(){
oldonload();
func();
}
}
}

addLoadEvent(t);
addLoadEvent(b);
addLoadEvent(c);
//等價於window.onload=function(){t();b();c();}
複製代碼

個人以爲直接使用隱式函數(如:window.onload=function(){t();b();c();})更快捷,當然使用addLoadEvent更professional,各取所好吧!

JSwindow.onload追加函數:

ContractedBlock.gifExpandedBlockStart.gif代碼
<script>
if(window.attachEvent)//IE:如果瀏覽器中存在window.attachEvent函數則使用window.attachEvent函數,判斷是否是IE還可以使用:if(document.all){//..}
window.attachEvent("onload",function(){alert("addmethod");});
else//FireFox
window.addEventListener("load",function(){alert("addmethod");},true);
</script>

運行,js中alert彈出消息,問題解決。

============相關資料================

attachEvent將指定函數綁定到事件,以便每當該事件在對象上觸發時都調用該函數。

InternetExplorer從5.0開始提供了一個attachEvent方法,使用這個方法,就可以給一個事件指派多個處理過程了。attachEvent對於目前的Opera也適用。但是Mozilla/Firefox並不支持這個方法。但是它支持另一個addEventListener方法,這個方法跟attachEvent差不多,也是用來給一個事件指派多個處理過程的。但是它們指派的事件有些區別,在attachEvent方法中,事件是以“on”開頭的,而在addEventListener中,事件沒有開頭的“on”,另外addEventListener還有第三個參數,一般這個參數指定爲false就可以了。

最後感謝vForm表單驗證程序的作者-雷曉寶

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章