zoukankan      html  css  js  c++  java
  • 仿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);

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

  • 相关阅读:
    7.25
    7.24
    7.23
    7.22
    输入语句/条件运算符
    flowLayoutPanel1设置内容随着鼠标滚动而滚动
    dataGridView读取xml文件
    读文本内容 写入文本内容 创建复制文本
    cmd.ExecuteScalar 和配置连接设置
    $.ajax async同步加载
  • 原文地址:https://www.cnblogs.com/fan-fan/p/3164362.html
Copyright © 2011-2022 走看看