前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >onclick与addEventListener区别

onclick与addEventListener区别

作者头像
全栈程序员站长
发布于 2022-09-14 08:06:03
发布于 2022-09-14 08:06:03
1.7K00
代码可运行
举报
运行总次数:0
代码可运行

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

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

结论:

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

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

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

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

5.IE9使用attachEvent和detachEvent

探究:

onclick添加事件:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
element.onclick = functionRef;

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

onclick删除事件:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
element.onclick = null;

DOM格式如上,javascript代码

运行结果:

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

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

addEventlistener绑定click事件:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
currentTarget.addEventListener(type, listener, option)

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

运行结果:

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

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

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

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

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
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.cn/158284.html原文链接:https://javaforall.cn

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2022年7月1,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
attachEvent和addEventListener区别
target.addEventListener(type, listener, useCapture);
书童小二
2018/09/03
9510
JQuery分析及实现part5之事件模块功能及实现
JQuery模块分析及其实现第五部分事件部分功能及实现,接第四部分! remove 方法 功能:将筛选出来的所有 dom 元素删除掉 实现思路 遍历 this 上的所有 dom 元素; 获取当前 dom 元素的父节点,调用 removeChild 方法删除自己; 循环结束,返回 this . remove: function() { return this.each(function() { this.parentNode.removeChild(this); }); },
ihoey
2018/10/31
6480
深入理解JavaScript与DOM
DOM(Document Object Model,文档对象模型)是一个通过和JavaScript进行内容交互的API。Javascript和DOM一般经常作为一个整体,因为Javascript通常都是用来进行DOM操作和交互的。
前端达人
2021/04/01
6880
深入理解JavaScript与DOM
Javascript 的addEventListener()及attachEvent()区别分析
Mozilla中:  addEventListener的使用方式:  target.addEventListener(type, listener, useCapture);  target: 文档节点、document、window 或 XMLHttpRequest。  type: 字符串,事件名称,不含“on”,比如“click”、“mouseover”、“keydown”等。  listener :实现了 EventListener 接口或者是 JavaScript 中的函数。  useCapture
smy
2018/04/03
1.6K0
javascript事件详解
事件流 事件流两种顺序:冒泡与捕获。 简单的添加与删除事件 obj.onclick=function(){} obj.onclick=null; 通用事件添加的删除 obj.addEventListener(),obj.attachEvent() obj.removeEventListener(),obj.attachEvent() 三个参数分别表示,(事件,绑定函数,事件流), 注意: 1.如果必须得删除事件,这种写法,不能用匿名函数,否则删除函数的时候,不方便。 2.attachEvent的事件名称是o
前朝楚水
2018/04/02
1.4K0
从零开始学 Web 之 DOM(六)为元素绑定与解绑事件
前导:如果一个按钮绑定了多个点击事件,那么点击按钮的时候只会执行最后一个点击事件,前面的点击事件都被覆盖了。那么如何为一个按钮绑定多个相同的事件,并且每个事件都会执行呢?
Daotin
2018/08/31
1.1K0
事件高级
给元素添加事件,称为注册事件或者绑定事件。 注册事件有两种方式:传统方式和方法监听注册方式
梨涡浅笑
2022/05/08
1.4K0
事件高级
js编程笔记之事件异常
事件处理程序的运行环境 1.ele.onxxx = function (event) {} 程序this指向是dom元素本身 2.obj.addEventListener(type, fn, false); 程序this指向是dom元素本身 3.obj.attachEvent(‘on’ + type, fn); 程序this指向window 封装兼容性的 addEvent(elem, type, handle);方法 复制代码 解除事件处理程序 ele.onclick = false/‘’/null; e
用户10094878
2022/11/21
7360
JavaScript绑定事件的三种方式
这种方式就是在一个元素上面直接绑定了一个点击onclick事件,此事件为DOM 0级标准。同时,这个事件的优先级是最高的。
踏浪
2019/07/31
6650
JavaScript绑定事件的三种方式
事件
事件 JavaScript和HTML的交互是通过事件实现的。JavaScript采用异步事件驱动编程模型,当文档、浏览器、元素或与之相关对象发生特定事情时,浏览器会产生事件。如果JavaScript关注特定类型事件,那么它可以注册当这类事件发生时要调用的句柄。事件是某个行为或者触发,比如点击、鼠标移动..... 当用户点击鼠标时 当网页已加载时 当图像已加载时 当鼠标移动到元素上时 当用户触发按键时... 事件流 事件流描述的是从页面中接收事件的顺序,比如有两个嵌套的div,点击了内层的div,这时候是内层
小胖
2018/06/27
1.5K0
JavaScript 事件绑定
事件绑定分为两种:一种是传统事件绑定(内联模型,脚本模型),一种是现代事件绑定(DOM2级模型)。现代事件绑定在传统绑定上提供了更强大更方便的功能。 一.传统事件绑定的问题 传统事件绑定有内联模型和脚本模型,内联模型我们不做讨论,基本很少去用。先来看一下脚本模型,脚本模型将一个函数赋值给一个事件处理函数。 var box = document.getElementById('box');//获取元素 box.onclick = function () {//元素点击触发事件 alert('Lee'); };
汤高
2018/01/11
3.7K0
DOM事件基本概念大总结(前端必备)
事件流 这一概念源自于对事件触发对象的思考。例如常见的点击事件,鼠标移动事件。这些事件发生之时,往往不只是点击或者移动到某一特定元素上。 比如点击某一个按钮,而它是由上一层的父标签,或许在上一层还有父标签甚至是整个页面。因此点击一个元素可以看成是同时点击了父标签或者整个页面。那么此时事件应该怎么响应到指定标签呢? 事件冒泡 即事件从指定元素开始传播到最外层的元素,并且该事件不仅会在指定元素上发生,还会在传播过过程中的每一个元素上发生。 <html> <body> <div>
努力的Greatiga
2022/07/25
2K0
【JS】395-重温基础:事件
事件流描述的是从页面中接收事件的顺序,通常有这样两种完全相反的事件流概念:事件冒泡流(IE团队提出)和事件捕获流(网景团队提出)。
pingan8787
2019/11/05
1.1K0
Web开发的基本功
#ThoughtWorkers好声音#第十五期 (图片:网络) 有些东西称为基本功,对于 Web 开发而言,事件处理模型便是其中的一个,我们经常会在代码里遇到阻止浏览器默认行为的做法。 成都办公室
ThoughtWorks
2018/04/16
1.5K0
Web开发的基本功
面试官:考你几个简单的事件问题吧
事件处理是JavaScript中非常重要的概念,我们使用的客户端软件往往都是事件驱动的,所以面试官特别喜欢问一些事件相关的知识,这里记录几个常见的问题,供大家学习。
kai666666
2020/10/19
1.2K0
事件
利用 on 开头的事件,如 onclick, 同一个元素同一个事件只能设置一个处理函数,出现多个处理函数的话,后面的会覆盖前面的。
赤蓝紫
2023/01/01
1.5K0
事件
浅谈JavaScript的事件(事件对象)
  在触发DOM上的某个事件时,会产生一个事件对象event,这个对象中包含这所有与事件有关的信息。包括导致事件的元素、事件的类型和事件的相关信息。例如鼠标操作的事件中,会包含鼠标的位置信息。而键盘触发的事件会包含与按下的键有关信息。所有浏览器都支持event对象,但支持方式不同。 DOM中的事件对象   兼容dom的浏览会将一个event对象传递到事件处理程序中。 1 var aa=document.getElementById("aa"); 2 aa.onclick=functi
水击三千
2018/02/27
1.3K0
一次关于js事件出发机制反常的解决记录
起因:正常情况下我点击s2时是先弹出我是children,再弹出我是father,但是却出现了先弹出我是father,后弹出我是children的情况,这种情况是在和安卓app交互的h5页面中出现的,本地测试没有问题,但是在安卓打包的内嵌h5页面就出现了问题。简单化的代码先展示出来。 html代码如下 <div id="father" class="ss1">s1 <div id="children" class="ss2">s2 </div> </div> 事件绑定如下 $('#fathe
吴裕超
2018/02/28
1.6K0
一次关于js事件出发机制反常的解决记录
「面试常问」系统理解浏览器之事件机制
在早期 IE 和 Netscape 团队在开发第四代浏览器的时候,遇到一个问题:当点击一个按钮的时候,是应该先处理父级的事件呢?还是应该先处理按钮的事件呢?IE 和 Netscape 给出了 2 种完全相反的答案,IE 提出事件冒泡的概念,而 Netscape 则支持事件捕获。
用户4456933
2021/06/01
6040
「面试常问」系统理解浏览器之事件机制
常用的web方法 web API(一)
   例子:  my$("btn").onclick=function(){};
凯哥Java
2019/06/28
8510
常用的web方法 web API(一)
相关推荐
attachEvent和addEventListener区别
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验