仿jQuery中undelegate()方法功能的函数

//跨浏览器事件绑定

function  addEvent(obj,type,fn){

            if(typeof obj.removeEventListener !='undefined'){    /////////////////////////w3c

                //创建一个数组,保存事件

                if(!obj.events) obj.events=[];

                //创建数组,保存方法

                if(!obj.events[type]) obj.events[type]=[];

                //判断数组里是否有数据,有数据检查一下是否有相同的方法

                if(obj.events[type].length>0){

                    if(addEvent.equal(obj.events[type],fn)) {

                        return false;

                    } else {

                        obj.events[type].push(fn);

                    }

                } else {

                    obj.events[type].push(fn);

                }

                obj.addEventListener(type, fn, false);

            } else {        /////////////////////////////////////IE

                //创建一个数组,保存事件

                if(!obj.events) obj.events=[];

                //创建数组,保存方法

                if(!obj.events[type]) obj.events[type]=[];

                //判断数组里是否有数据,有数据检查一下是否有相同的方法

                if(obj.events[type].length>0){

                    if(addEvent.equal(obj.events[type],fn)) {

                        return false;

                    } else {

                        obj.events[type].push(fn);

                    }            

                } else {

                    obj.events[type].push(fn);

                }

                //执行事件处理函数

                var _this=this;

                obj['on'+type]=addEvent.exec;

            } 

    

}



//执行事件处理函数

addEvent.exec=function(event){

            var e =event || window.event;

            var es = this.events[e.type];

            for(var i in es){

                es[i].call(this);

            }

}





//同一个注册函数进行屏蔽

addEvent.equal=function(es,fn){

    for(var i in es){

        if(es[i]==fn){

            return true;

        }

    }

    

    return false;

}



    





//删除事件

function removeEvent(obj,type){



        if(typeof obj.removeEventListener !='undefined'){    ///////////////////////////////////////w3c

            if(type){    //删除指定事件

                    //判断删除的事件是否绑定

                    if(!obj.events[type]) return false;

                    for(var j=0;j<obj.events[type].length;j++){

                        obj.removeEventListener(type,obj.events[type][j], false);

                    }

            } else {        //清除元素所有事件

                        for(var eveName in obj.events){

                                for(var k=0;k<obj.events[eveName].length;k++){

                                    obj.removeEventListener(eveName,obj.events[eveName][k], false);

                                }

                        }

            }

        } else {                /////////////////////////////////////IE

            if(type){            //删除指定事件

                    //判断删除的事件是否绑定

                    if(!obj.events[type]) return false;

                    for(var j=0;j<obj.events[type].length;j++){

                        delete obj.events[type][j];

                    }                        

            } else {            //清除元素所有事件

                    for(var eveName in obj.events){

                            for(var k=0;k<obj.events[eveName].length;k++){

                                delete    obj.events[eveName][k];

                            }

                    }                

            }

        }

    

}
addEvent(btn,'click',function(){

         alert('事件绑定');

});

//删除click事件

removeEvent(btn,'click');

//删除mouseover事件

removeEvent(btn,'mouseover');

//删除所有事件

removeEvent(btn);

没优化函数,函数中有许多重复代码,因为感觉我写函数的思考不是很好,但是又没别的好想法,没有优化了。
如果哪位大鸟有好的思路或想法,请留言,

你可能感兴趣的:(delegate)