资源描述:
《javascript事件绑定学习要点_基础知识》由会员上传分享,免费在线阅读,更多相关内容在工程资料-天天文库。
1、javascript事件绑定学习要点事件绑定分为两种:一种是传统事件绑定(内联模型,脚木模型),一种是现代事件绑定(D0M2级模型)。现代事件绑定在传统绑定上提供了更强大更方便的功能。一传统事件绑定的问题传统事件绑定屮的内联模型不做讨论,基本很少去用。先来看一下脚本模型,脚本模型将一个函数赋值给一个事件处理函数。传统绑定如:window.onload二function(){varbox=documcnt・getElcmentByld(5box');box.onclick=function(){alert
2、('Lee');};};问题一:一个事件处理函数触发两次事件如果一个页面有两个或者多个js,并且第一个js是第一个程序开发的,第二个js是第二个程序员开发的。第一个window,onload被覆盖了,如window.onload=function(){alert('Lee');};window.onload二function(){alert('Mr.lee');}结果只是打印了Mr.lee其实是冇办法解决这个问题的,看下而这两种形式。a:alert(window,onload);//一开始没有注册win
3、dow,onload,那么就是nullwindow.onload=function(){alert('Lee,);};alert(window,onload);〃如果已经有window,onload,打卬的是函数functionwindow.onload=function(){alert('Mr.lee,);}b:alert(typeofwindow,onload);//一开始没有window,onolad,IC版火狐显示undefined,新版显示object,window.onload二functi
4、on(){alert('Lee,);};alert(typeofwindow,onload);//如果已经有window,onload,所有浏览器都会显示functionwindow.onload二function(){alert('Mr.lee,);}所以解决办法有了。window.onload二function(){alert('Lee');};if(typeofwindow.onload==,function'){varsaved=null;//保存上一个事件对象saved二window.onlo
5、ad;}//saved就是window.onload,saved。相当于window.onload(),但是window,onload()不能执彳亍的//所以saved()相当于window・onloadhtmction(){}window.onload=function(){if(saved){saved();〃执行上一个事件window,onload二function(){}}alertCMr.lee*);//执行本事件问题二:事件切换器切换一个id为box的div,让里面的背景red与blue直接
6、切换,并且切换之前弹框一次,如:window.onload=function(){varbox二document.getElementById('box,);box.classNeime二〃red";box.onclick二function(){alert(JLee,);//只执行了一次blue,call(this);〃通过匿名函数执行某一函数,那么里面的this就是代表的window,所以可以通过call传递};}functionblue(){this.className二〃blue";this,on
7、click二red;functionred(){this.classN^me二〃red";this・onclick二blue;上面的代码虽然实现了切换功能,但是弹框只执行了一次。//添加事件函数//obj相当于window//type相当于onload//fn相当Tfunction(){}functionaddEvent(obj,type,fn){//用于保存上一个事件varsaved=null;if(typeofobj['on,+type]==,function,){saved二obj['on,+ty
8、pe];//保存上一个事件}obj['on,+type]二function(){if(saved){saved();}fn.call(this);addEvent(window,'load,,function(){varbox二document.getElementByld(〃box〃);//addEvent(box,Jclick,,function(){//目的达到,每次都执行了,没有被覆盖//alert('ss');//});addEv