细谈addEventListener

为啥要用addEventListener?

分析一下html代码

window.onload = function(){
    var box = document.getElementById("box");
    box.onclick = function(){
        console.log("我是box1");
    }
    box.onclick = function(){
        box.style.fontSize = "18px";
        console.log("我是box2");
    }
}
     运行结果:“我是box2”

原因就是很简单,第二个onclick事件把第一个onclick事件给覆盖了。虽然大部分时候,我们用on可以解决,但是如果要有增加多个相同的事情,on肯定就实现不了。对此就引入今天的主角---addEventListener,多次绑定同一个时间,切不会覆盖。

修改一下上面代码

window.onload = function(){
    var box = document.getElementById("box");
    box.addEventListener("click",function(){
        console.log("我是box1");
    })
    box.addEventListener("click",function(){
        console.log("我是box2");
    })
}
    运行结果:我是box1
         我是box2

addEventListener总共有三个参数,第一个参数填写的是事件名称,记得不需要加on,第二个参数是函数方法,第三个参数是捕获或者冒泡的时候处理,第三个参数在大部分情况下都不需要填写,默认为false。(true--捕获,false--冒泡)

第三个参数

分别给body和box添加点击事件

box.addEventListener("click",function(){
    console.log("box");
})    //冒泡

child.addEventListener("click",function(){
    console.log("child");
})
  执行的结果:
        child
        box

默认情况事件是按照事件冒泡的执行顺序进行的。

若参数为true

box.addEventListener("click",function(){
    console.log("box");
},true)    //捕获

child.addEventListener("click",function(){
    console.log("child");
})
  执行的结果:
        box
        child

移除事件

一般的onclick事件通过

box.onclick =null;

赋予为空值,就能正常移除事件了。

addEcentListener需要使用的是removeEventListener

box.addEventListener("click",function(){
    console.log("box");
}) 
box.removeEventListener("click",function(){
    console.log("box");
})

注意:removeEventListener参数与addEcentListener必须是一致。

addEcentListener不支持IE6,IE7,IE8

所以到了IE,我们就用attachEvent方法

        <a id="xc">点击</a>
        <script type="text/javascript">
                function handler(e){
                        e=e||window.event;
                        var _this=e.srcElement||e.target;
                        alert(_this.innerHTML);
                }
                var object=document.getElementById('xc');
                object.attachEvent('onclick',handler);
        </script>
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • JavaScript 程序采用了异步事件驱动编程模型。在这种程序设计风格下,当文档、浏览器、元素或与之相关的对象发...
    劼哥stone阅读 5,030评论 3 11
  • 以下文章为转载,对理解JavaScript中的事件处理机制很有帮助,浅显易懂,特分享于此。 什么是事件? 事件(E...
    jxyjxy阅读 8,186评论 1 10
  • 一、问答 1. dom对象的innerText和innerHTML有什么区别? innerHTML: 也就是从对象...
    饥人谷_罗伟恩阅读 3,831评论 0 2
  • dom对象的innerText和innerHTML有什么区别? innerHTML指的是从对象的起始位置到终止位置...
    coolheadedY阅读 3,408评论 0 0
  • 增将处理目的在于突出图像中的感兴趣部分,而抑制不感兴趣的部分。 卷积积分与邻域处理 卷积的数学形式为: 图像的简单...
    plus先生阅读 5,027评论 0 1

友情链接更多精彩内容