addEventListener,attachEvent,元素绑定(解绑)多事件兼容

本文探讨了在JavaScript中如何实现addEventListener和attachEvent的事件绑定兼容性,适用于不同浏览器,包括IE8及更高版本。文章提供了简洁的代码示例,解释了如何处理click事件,并讨论了解绑事件的方法。

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

addEventListener,attachEvent,元素绑定多事件兼容

  • 有些时候我们需要对一个元素绑定多个事件或者一个元素多次事件绑定,通常会用addEventListener
  • 书写格式:对象.addEventListener(”事件类型”,”事件处理函数”,”false”)
  • 举个栗子
 document.getElementById("dv").addEventListener("click",function () {//为同一个元素添加多个事件
        console.log("谷歌火狐绑定事件");
        console.log("谷歌火狐绑定事件");
        console.log("谷歌火狐绑定事件");
        console.log("谷歌火狐绑定事件");
            },false);
  • 但是这个函数不兼容ie8,因为ie8有自己的事件绑定 函数如下:
  • 对象.attachEvent(有on的事件类型,事件处理函数)
    这其中有一个问题那就是这个代码虽然可以在ie8上解析,但是在ie11(edeg)不支持;是不是很无语他自己定义的东西在新版本他自己都不支持了,但是考虑到有一些用户还在用Windows xp 系统,.attachEvent还没有被抛弃;
    且.attachEvent还不能被谷歌和火狐解析,所以这家伙只能针对ie低版本浏览器
    效果如图:
    这里写图片描述

  • 好了话不多说直接上代码比较精简:

  //为任意元素.绑定任意的事件, 任意的元素,事件的类型,事件处理函数
    function addEventListener(element,type,fn) {
        //判断浏览器是否支持这个方法
        if(element.addEventListener){
            element.addEventListener(type,fn,false);
        }else if(element.attachEvent){
            element.attachEvent("on"+type,fn);
        }else{
            element["on"+type]=fn;
        }
    };

解析

  • 这个方法传入三个参数 1、任意元素 2、事件如(click)3、事件处理函数(function)
  • if(element.addEventListener)这里判断;点这个方法的时候是没有加()的;意思是判断浏览器是否支持这个方法
  • 注意不能加(),加了括号return 是返回一个结果 就不能达到效果了;
  • 把谷歌火狐的判断放在前面 因为它们的事件是 click 在后面ie的时候只需要拼接一个on 就好了,虽然也可以通过方法把on去掉,我们本来就是做兼容代码不需要带入不必要的方法;
  • 当然如果是判断其他的方法可以忽略 这里的例子主要是针对点击事件;

同理推出解绑方法:

function removeEventListener(element,type,fnName) {
        if(element.removeEventListener){
            element.removeEventListener(type,fnName,false);
        }else if(element.detachEvent){
            element.detachEvent("on"+type,fnName);
        }else{
            element["on"+type]=null;
        }
    }

试一下 :

我将用addEventListener 这个方法打开三个浏览器谷歌、火狐、ie8;
谷歌浏览器

火狐浏览器

IE8

通过以上的代码成功让三个浏览器都能解析

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值