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);

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

  • 相关阅读:
    POJ 2018 二分
    873. Length of Longest Fibonacci Subsequence
    847. Shortest Path Visiting All Nodes
    838. Push Dominoes
    813. Largest Sum of Averages
    801. Minimum Swaps To Make Sequences Increasing
    790. Domino and Tromino Tiling
    764. Largest Plus Sign
    Weekly Contest 128
    746. Min Cost Climbing Stairs
  • 原文地址:https://www.cnblogs.com/fan-fan/p/3164362.html
Copyright © 2011-2022 走看看