关于原生事件绑定中attachEvent与addEventlistener中兼容性以及attachEvent函数中this指代window问题

本文详细介绍了在原生事件绑定中如何根据不同浏览器(如IE、FF、Chrome)使用不同的方法(attachEvent与addEventListener),并讨论了事件名称的差异以及如何通过封装函数来解决兼容性问题。此外,文章还展示了当事件处理函数中包含`this`关键字时,不同浏览器的表现差异,并提供了解决方案。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

在原生事件绑定中IE绑定中需要用到attachEvent,FF与chrome中需要用到addEventListener.

attachEvent(事件,函数)

例如:var oBtn = document.getElementById('button');

            oBtn.addachEvent('onclick',function(){

alert('a');

           })

         oBtn.addachEvent('onclick',function(){

alert('b');

           })

addEventListener(事件,函数,false)

例如:var oBtn = document.getElementById('button');

            oBtn.addEventListener('click',function(){

alert('a');

           },false)

         oBtn.addEventListener('click',function(){

alert('b');

           },false)

上面大家可以看到运用事件绑定的时候,事件的区别 一个是用onclick 一个是用到click,所以FF与chrome中的事件是不带on,而IE是必须带on的

由于出现兼容性的问题 需要封装函数

function addEvent(obj,ev,fn){

if(obj.attachEvent){

//针对IE浏览器

obj.attachEvent('on'+ev,fn)

}else{

//针对FF与chrome

obj.addEventListener(ev,fn,false)

}

}

所以上述的实例可以改写成

addEvent(oBtn,'click',function(){

alert('a');

})

addEvent(oBtn,'click',function(){

alert('b');

})

但是函数中如果出现this的话

例如:

addEvent(oBtn,'click',function(){

alert(this);

})

得到的结果是不一样的 this在IE中弹出的window,在FF与chrome中指代的是当前对象

如果要用到当前对象需要对函数进一步改造

addEvent(oBtn,'click',function(ev){

var oEvent = ev||event;

var that=oEvent.srcElement||oEvent.target;

alert(that)


})



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值