码迷,mamicode.com
首页 > Windows程序 > 详细

事件绑定及深入上-多个window.onload

时间:2017-08-23 19:04:46      阅读:123      评论:0      收藏:0      [点我收藏+]

标签:name   存在   多个   eve   classname   red   递归   ack   obj   

事件绑定及深入 多个window.onload一起执行

如何让执行两个window.onload
window.onload=function(){
alert(‘Lee‘);
}

if(typeof window.onload==‘function‘){
var saved=null; //保存上一个事件对象
saved=window.onload;
}

//saved就是window.onload,saved()相当于window.onload(),但是window.onload()不能执行的
//所以saved()相当于window.onload=function(){}

window.onload=function(){
if(saved) saved(); //执行上一个事件
alert(Mr.Lee); //执行本事件
}

----------------------------------------------------
//事件切换器
<style>
.red{
width: 100px;
height: 100px;
background:red;
}
.blue{
width: 100px;
height: 100px;
background:blue;
}
</style>

<div id="box" class="red">测试Div</div>


//添加事件函数
//obj相当于window
//type相当于onload
//fn相当于function(){}
function addEvent(obj,type,fn){
//用于保存上一个事件
var saved=null;
//判断事件是否存在
if(typeof obj[‘on‘+type]==‘function‘){
saved=obj[‘on‘+type]; //保存上一个事件
}
//执行事件
obj[‘on‘+type]=function(){
if(saved) saved();
fn.call(this); //把this传递过去
}
}

addEvent(window,‘load‘,function(){
alert(‘Lee‘);
})


addEvent(window,‘load‘,function(){
alert(‘Mr.Lee‘);
})


addEvent(window,‘load‘,function(){
alert(‘Miss.Lee‘);
})

以下代码事件切换:
addEvent(window,‘load‘,function(){
var box=document.getElementById(‘box‘);
addEvent(box,‘click‘,function(){
alert(‘Lee‘);
});
addEvent(box,‘click‘,toBlue);
})

function toRed(){
this.className=‘red‘;
removeEvent(this,‘click‘);
addEvent(this,‘click‘,toBlue);
}

function toBlue(){
this.className=‘blue‘;
removeEvent(this,‘click‘);
addEvent(this,‘click‘,toRed);
}
//当不停的切换的时候,浏览器突然卡死,并且报错:too much recursion,太多的递归
//因为积累了太多的保存的事件,
//解决方案,就是用完的事件,就立刻移除掉

function removeEvent(obj,type){
if(obj[‘on‘+type]) obj[‘on‘+type]=null;
}

 

事件绑定及深入上-多个window.onload

标签:name   存在   多个   eve   classname   red   递归   ack   obj   

原文地址:http://www.cnblogs.com/gengxinnihaoma/p/7419599.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!