平時作項目常常須要使用window.onload,html
用法以下:瀏覽器
functionfunc(){alert("thisiswindowonloadevent!");return;}
ide
window.onload=func;函數
或者以下:
post
window.onload=function(){alert("thisiswindowonloadevent!");return;}this
但window.onload不能同時加載多個函數。spa
好比:
functiont(){
alert("t")
}
functionb(){
alert("b")
}
window.onload=t;
window.onload=b;
後面會把前面的覆蓋,上面代碼只會輸出b。
此時可用以下方法解決:code
window.onload=function(){t();b();}orm
另外一種解決方法以下:htm
代碼
function
addLoadEvent(func){
var
oldonload
=
window.onload;
//
獲得上一個onload事件的函數
if
(
typeof
window.onload
!=
'
function
'
){
//
判斷類型是否爲'function',注意typeof返回的是字符串
window.onload
=
func;
}
else
{
window.onload
=
function
(){
oldonload();
//
調用以前覆蓋的onload事件的函數---->因爲我對js瞭解很少,這裏我暫時理解爲經過覆蓋onload事件的函數來實現加載多個函數
func();
//
調用當前事件函數
}
}
}
//
(完整示例)使用以下:
function
t(){
alert(
"
t
"
)
}
function
b(){
alert(
"
b
"
)
}
function
c(){
alert(
"
c
"
)
}
function
addLoadEvent(func){
var
oldonload
=
window.onload;
if
(
typeof
window.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追加函數:
代碼
<
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表單驗證程序的做者-雷曉寶