IE与W3C事件模型的几个不一样点(针对于IE6,7,8版本) 1.绑定函数不同,IE中庸attachEvent,detachEvent,事件必须加on ,IE中必须加on,而W3C不须要 2.IE7,8 中有个毛病,先绑定的事件后发生(随机),绑定事件中,W3C中this指向对象自己,而IE指向window变量, 3.IE6模型中部支持捕捉模型,只支持冒泡,事件对象不同,W3C中,对象事件自动传入函数的第一个参数,而在IE中,事件对象是window.event属性值,IE6,7,8已经支持自动传入事件对象。 <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> <title>IE事件模型与标准模型的兼容</title> <style> </style> <script type="text/javascript"> /** * IE与W3C事件模型的几个不一样点(针对于IE6,7,8版本) *1.绑定函数不同,IE中庸attachEvent,detachEvent,事件必须加on ,IE中必须加on,而W3C不须要 *2.IE7,8 中有个毛病,先绑定的事件后发生(随机),绑定事件中,W3C中this指向对象自己,而IE指向window变量, *3.IE6模型中部支持捕捉模型,只支持冒泡,事件对象不同,W3C中,对象事件自动传入函数的第一个参数,而在IE中,事件对象是window.event属性值,IE6,7,8已经支持自动传入事件对象。 */ /** * 封装兼容IE的事件模型 */ function addEvent(obj,type,event,mode){ //将IE绑定的时间塞入数组中,经过数组来执行函数 if(!obj[('__'+type)]){ obj[('__'+type)]=[]; } obj[('__'+type)].push(event); if(!obj[('on'+type)]){ //将其付给一个自定义的函数 obj[('on'+type)]=function(){ //经过数组一次调用函数 for(var len=obj[('__'+type)].length,i=0; i<len;i++){ obj[('__'+type)][i].apply(obj); } } } /*if(obj.attachEvent()){ obj.attachEvent('on'+type,event,mode); }else{ obj.addEventListener(tyoe,event,mode); }*/ } window.onload=function(){ var button=document.getElementById("submit"); addEvent(button,'click',function(){ this.style.backgroundColor='red'; },false); } </script> </head> <body> <input type="button" id="submit" value="点击"/> </body> </html>