与事件处理相关的function:addEventListener、removeEventListener与attachEvent、detachEvent

本文详细介绍了addEventListener和attachEvent两种事件监听方法的区别与用法,并解释了如何使用removeEventListener和detachEvent来移除事件监听器。此外,还提供了一个兼容不同浏览器的事件添加函数。

addEventListener、removeEventListener与attachEvent、detachEvent,前者大部分主流浏览器都支持,为W3C标准,IE8以及更早版本不支持,后者支持IE浏览器

addEventListener向指定元素添加事件句柄,语法为:

ele.addEventListener(event,function,usecapture)

event:事件名称(不含on)比如“click”、“keydown”等
function:指定事件触发时执行的函数
usecapture:指定事件是否在捕获或者冒泡阶段执行(true:在捕获阶段执行;false:默认,在冒泡阶段执行)

document.getElementById("btnclick").addEventListener("click",function(){
///代码块
},false)

removeEventListener向指定元素移除由addEventListener方法添加的事件句柄,语法为:

ele.removeEventListener(event,function,usecapture)  
//其中移除时传入的参数与添加addEventListener时传入的参数相同,这也就是说通过addEventListener添加的匿名函数无法移除

下面的实例则不能够删除addEventListener

var btnclick = document.getElementById("btnclick");
btnclick.addEventListener("click",function(){
    /////代码块
},false);
btnclick.removeEventListener("click",function(){
    ////代码块
},false);

如果想要进行removeEventListener则先定义function:

function f1(){
    /////代码块
}
var btnclick = document.getElementById(“btnclick”);
btnclick.addEventListener("click",f1,false);
btnclick.removeEventListener("click",f1,false);

attachEvent作用与addEventListener一样,向指定元素添加事件句柄,语法为:

ele.attachEvent(event,function)

event:事件名称(含有on)比如“onclick”、“onkeydown”等
function:指定事件触发时执行的函数

document.getElementById("btnclick").attachEvent("onclick",function(){
///代码块
})

IE只支持事件冒泡,不存在事件捕捉

detachEvent作用与removeEventListener功能类似,不过是移除由attachEvent定义的事件,语法为:

ele.detachEvent(event,function)
    ////其中移除时传入的参数与添加attachEvent时传入的参数相同,这也就是说通过attachEvent添加的匿名函数无法移除,这点和removeEventListener一样

可以将addEvevtListener和attachEvent整合在一个函数中

function addEvent(elm, evType, fn, useCapture) {
    if (elm.addEventListener) {
        elm.addEventListener(evType, fn, useCapture);
        return true;
    } else if (elm.attachEvent) {
        var r = elm.attachEvent(‘on‘ + evType, fn);
        return r;
    } else {
        elm['on' + evType] = fn;//DOM 0
    }
}

下面这个是在别的网址上看到的:

var addEvent=(function(){
    if(document.addEventListener){
        return function(el,type,fn){
            if(el.length){
                        for(var i=0;i<el.length;i++){
                            addEvent(el[i],type,fn);
                        }
            } else {
                        el.addEventListener(type,fn,false);
               }
        };
    } else {
        return function(el,type,fn){
            if(el.length){
                        for(var i=0;i<el.length;i++){
                            addEvent(el[i],type,fn);
                        }
             }else{
                        el.attachEvent('on'+type,function(){
                            return fn.call(el,window.event);
                        });
                }
        };
        }
})();
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值