YanTianFeng的知识库

Want Coding

Want Reading

文章 89

访问 18443

评论 2

头像

YanTianFeng

发私信

文章 89
访问 18443
评论 2
JAVASCRIPT
返回顶部

Knowledge  Event 兼容性完整封装

标签   js   兼容性  

  ( 372 )       ( 0 )


前言

封装一个能够兼容多浏览器的 JavaScript 库 EventUtil 。

完整封装代码

var EventUtil={
    addHandler:function(element,type,handler){
        if(element.addEventListener){ 
            element.addEventListener(type,handler,false);
        }else if(element.attachEvent){
            element.attachEvent('on'+type,handler);
        }else{
            element['on'+type]=handler;
        }
    },
    getEvent:function(event){
        return event?event :window.event;
    },
    getTarget:function(event){
        return event.target || event.srcElement;
    },
    preventDefault:function(event){
        if(event.preventDefault){
            event.preventDefault();
        }else{
            event.returnValue=false;
        }
    },
    removeHandler:function(element,type,handler){
        if(element.removeEventListener){
            element.removeEventListener(type,handler,false);
        }else if(element.detachEvent){
            element.detachEvent('on'+type,handler);
        }else{
            element['on'+type]=null;
        }
    },
    stopPropagation:function(event){
        if(event.stopPropagation){
            event.stopPropagation();
        }else{
            event.cancelBubble=true;
        }
    },
    getCharCode:function(event){
        if(typeof event.charCode=="number"){//在不支持的浏览器中值是undefined
            return event.charCode;
        }else{
            return event.keyCode;
        }    
    }
};

为保证处理事件的代码在大多数浏览器下一致运行,只需要关注冒泡阶段。

每部分功能使用

添加事件: addHandler

var elem = document.getElementById('elemId');
EventUtil.addHandler(elem,'click',function(){ });

移除事件: removeHandler

var elem = document.getElementById('elemId');
EventUtil.removeHandler(elem,'click',function(){ });

需要和 addHandler 参数一致;还有,匿名函数无法移除!

获取事件对象: getEvent

var elem = document.getElementById('elemId');
elem.onclick=function(event){
    event=EventUtil.getEvent(event);//这行代码添加到开头,确保随时可以使用event对象,不必担心用户使用的什么浏览器
    //....这里随时可以使用event对象
};

获取目标元素: getTarget

var elem = document.getElementById('elemId');
elem.onclick=function(event){
    event=EventUtil.getEvent(event);
    var target=EventUtil.getTarget(event);
};

取消事件默认行为: preventDefault

var elem = document.getElementById('elemId');
elem.onclick=function(event){
    event=EventUtil.getEvent(event);
    EventUtil.preventDefault(event);
};

阻止事件冒泡: stopPropagation

var elem = document.getElementById('elemId');
elem.onclick=function(event){
    event=EventUtil.getEvent(event);
    EventUtil.stopPropagation(event);//阻止事件冒泡
}

document.body.onclick=function(event){ // 这个事件不会触发
    alert("Body clicked");
}

获取字符编码: getCharCode

var elem = document.getElementById('elemId');
elem.onclick=function(event){
    event=EventUtil.getEvent(event);
    console.log( EventUtil.getCharCode(event) );//获取字符编码
}