IE事件模型与标准模型的兼容

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>