onclick与addEventListener区别

onclick与addEventListener区别这次做项目遇到了这个问题,本来习惯性的每次都写的是addEventListener绑定click事件。但是当用addEventListener绑定了多次click事件的时候,引发了我的思考,这两者有区别吗?具体的事件分析可查看另一篇文章结论:1.onclick事件在同一时间只能指向唯一对象2.addEventListener给一个事件注册多个listener3.addEventLi…

大家好,又见面了,我是你们的朋友全栈君。

这次做项目遇到了这个问题,本来习惯性的每次都写的是addEventListener绑定click事件。但是当用addEventListener绑定了多次click事件的时候,引发了我的思考,这两者有区别吗?具体的事件分析可查看另一篇文章

结论:

1.onclick事件在同一时间只能指向唯一对象

2.addEventListener给一个事件注册多个listener

3.addEventListener对任何DOM都是有效的,而onclick仅限于HTML

4.addEventListener可以控制listener的触发阶段,(捕获/冒泡)。对于多个相同的事件处理器,不会重复触发,不需要手动使用removeEventListener清除

5.IE9使用attachEvent和detachEvent

探究:

onclick添加事件:

element.onclick = functionRef;

functionRef是一个函数,通常是在别处声明的函数名,或者是一个函数表达式

onclick删除事件:

element.onclick = null;

onclick与addEventListener区别

DOM格式如上,javascript代码

onclick与addEventListener区别

运行结果:

可想而知,只会弹出一个弹出框,虽然绑定了两次,‘我是click2’

一个click处理器在同一时间只能指向唯一的对象。因此就算对于一个对象绑定了多次,但是仍然只会出现最后的一次绑定。

addEventlistener绑定click事件:

currentTarget.addEventListener(type, listener, option)

同样上面的DOM结构,对应的javascript代码:

onclick与addEventListener区别

运行结果:

两次绑定的事件,都能够成功运行,也就是前后弹出 ‘我是addEvent1’ ‘我是addEvent2’

由此可知,对于一个可以绑定的事件对象,想多次绑定事件都能运行,选用addEventListener

通过addEventListener添加的事件必须通过相对应的为removeListener注销事件。但是如果像上面的用匿名函数的方式注册的事件,不能使用removeListener注销,因为没用对应事件的引用。

所以注册事件如果需要取消,最好使用一个引用,即:

var eventName = function () {
    //something
};

也正是这种方式,对于一个对象多次绑定同样的eventName,那么不会重复执行,只会执行一次。对于上面的匿名函数,就算内容一样,也会依次执行,因为并不能算是相同事件处理器

里面的this引用,不是window对象,而是触发事件的元素的引用。

对于IE9之前,相对应的是attachEvent和detachEvent

总结:

1.onclick事件在同一时间只能指向唯一对象

2.addEventListener给一个事件注册多个listener

3.addEventListener对任何DOM都是有效的,而onclick仅限于HTML

4.addEventListener可以控制listener的触发阶段,(捕获/冒泡)。对于多个相同的事件处理器,不会重复触发,不需要手动使用removeEventListener清除

5.IE9使用attachEvent和detachEvent

参考文献:

https://developer.mozilla.org/en-US/docs/Web/API/EventTarget/addEventListener

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/158284.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • PageHelper详解

    PageHelper详解PageHelperpa 是 mybatis 提供的分页插件 目前支持 Oracle Mysql MariaDB SQLite Hsqldb PostgreSQL 六种数据库 使用方法原始样式 每页显示多条数据 现在的需求是每页显示 4 条数据后端导入依赖依赖 pagehelper 开始分页 Service 方法调用 SQL 查询前添加 PageHelper startPagePag startPage 1 20 这里有两个参数 分别为 page 1 rows 2

    2025年8月5日
    0
  • 端口扫描程序NMAP使用手册

    端口扫描程序NMAP使用手册

    2021年8月23日
    56
  • 位运算符有哪些_或运算和异或运算

    位运算符有哪些_或运算和异或运算位运算符的计算主要用在二进制中。实际开发中也经常会遇到需要用到这些运算符的时候,同时这些运算符也被作为基础的面试笔试题。所以了解这些运算符对程序员来说是十分必要的。于此,记录下我所理解的运算符:如果以开关开灯论:有这样两个开关,0为开关关闭,1为开关打开。与(&)运算与运算进行的是这样的算法:0&0=0,0&1=0,1&0=0,1&1=1在与运算中两个开关是

    2022年10月10日
    3
  • linux 安装Jenkins和配置

    linux 安装Jenkins和配置简要介绍Jenkins是一个开源软件项目,是基于Java开发的一种持续集成工具,用于监控持续重复的工作,旨在提供一个开放易用的软件平台,使软件的持续集成变成可能。语言:Java一句话描述:持续集成工具建议的版本建议使用版本为“jenkins-2.164.x”。环境清单:CentOS7.6配置安装环境安装OpenJDK。 要求Java的OpenJDK为“1.8.0”以上,可以通过以下命令安装…

    2025年7月7日
    7
  • ping命令详解 ping命令入门详解

    ping命令详解 ping命令入门详解在这个时代,科技越来越发达,网络已经越来越成为人们不可缺少的一部分。计算机也已经是很多学校的课程了,因为计算机技术是非常有技术性的专业,它其中涉及到很多专业知识,需要通过学习才能掌握。今日小编就为大家介绍一个计算机的命令,它叫做Ping,这边介绍一下它的入门知识,主要是关于ping连接和命令方面的介绍。  1、Ping的基础知识  ping命令相信大家已经再熟悉不过了,但是能把ping的功能发…

    2022年9月22日
    7

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号