当前位置: 代码迷 >> JavaScript >> js window.onload 加载多个函数跟追加函数
  详细解决方案

js window.onload 加载多个函数跟追加函数

热度:373   发布时间:2012-09-07 10:38:15.0
js window.onload 加载多个函数和追加函数

js window.onload 加载多个函数和追加函数

平时做项目 经常需要使用window.onload,

用法如下:

function func(){alert("this is window onload event!");return;}?

window.onload=func;

或者如下:

window.onload=function(){alert("this is window onload event!");return;}

但window.onload 不能同时加载多个函数。

比如:
function t(){
alert("t")
}
function b(){
alert("b")
}
window.onload =t ;
window.onload =b ;
后面会把前面的覆盖,上面代码只会输出 b。

此时可用如下方法解决:

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

另一种解决方法如下:

?

复制代码
代码
<!--<br/ /><br/ />Code highlighting produced by Actipro CodeHighlighter (freeware)<br/ />http://www.CodeHighlighter.com/<br/ /><br/ />-->?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,各取所好吧!

?

JS window.onload追加函数:

?

?

代码
复制代码
<!--<br/ /><br/ />Code highlighting produced by Actipro CodeHighlighter (freeware)<br/ />http://www.CodeHighlighter.com/<br/ /><br/ />--><script>
if(window.attachEvent)//IE:如果浏览器中存在window.attachEvent函数则使用window.attachEvent函数,判断是否是IE还可以使用:if?(document.all){//..}
window.attachEvent("onload",function()?{alert("add?method");});
else??//FireFox
window.addEventListener("load",function()?{alert("add?method");},true);
</script>
复制代码

?

?

?

运行,js中alert弹出消息,问题解决。

============相关资料================

attachEvent?? 将指定函数绑定到事件,以便每当该事件在对象上触发时都调用该函数。

?Internet Explorer 从 5.0 开始提供了一个 attachEvent 方法,使用这个方法,就可以给一个事件指派多个处理过程了。attachEvent 对于目前的 Opera 也适用。但是 Mozilla/Firefox 并不支持这个方法。但是它支持另一个 addEventListener 方法,这个方法跟 attachEvent 差不多,也是用来给一个事件指派多个处理过程的。但是它们指派的事件有些区别,在 attachEvent 方法中,事件是以 “on” 开头的,而在 addEventListener 中,事件没有开头的 “on”,另外 addEventListener 还有第三个参数,一般这个参数指定为 false 就可以了。

最后感谢vForm表单验证程序的作者-雷晓宝

?

本文来自CSDN博客,转载请标明出处:http://blog.csdn.net/chenlei65368/archive/2009/09/12/4544823.aspx

  相关解决方案