Loading [MathJax]/jax/output/CommonHTML/config.js
前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >专栏 >前端系列第2集-如何让事件先冒泡后获取?

前端系列第2集-如何让事件先冒泡后获取?

作者头像
达达前端
发布于 2023-10-08 10:56:21
发布于 2023-10-08 10:56:21
22100
代码可运行
举报
文章被收录于专栏:达达前端达达前端
运行总次数:0
代码可运行

事件冒泡是指当一个元素上的事件被触发后,该事件会从该元素开始向上冒泡,直到传播到文档对象,并且可以被其他元素捕获。默认情况下,事件是先捕获后冒泡。如果希望事件先冒泡后获取,可以使用以下两种方法之一:

  1. 使用事件委托(Event Delegation)

事件委托是一种通过在其父元素上监听事件并利用事件冒泡来处理其子元素上的事件的技术。例如,如果有一个包含多个按钮的列表,并且希望在单击每个按钮时执行相同的操作,可以将单击事件监听器添加到列表元素上,并使用事件对象来获取单击的按钮。

示例代码:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
<ul id="myList">
  <li><button>Button 1</button></li>
  <li><button>Button 2</button></li>
  <li><button>Button 3</button></li>
</ul>

<script>
  const myList = document.querySelector('#myList');
  myList.addEventListener('click', (event) => {
    if (event.target.tagName === 'BUTTON') {
      // 在这里处理单击事件
    }
  });
</script>

在这个例子中,我们使用事件委托将单击事件监听器添加到列表元素上,并在事件处理程序中检查被单击的元素是否为按钮。这个方法可以确保事件先冒泡后获取,因为我们将监听器添加到父元素上,而不是每个子元素上。

  1. 使用 setTimeout()

另一种方法是将事件处理程序延迟一小段时间再执行。在此期间,事件将继续向上传播并且可以被其他元素捕获。然后,事件处理程序将以一种稍微延迟的方式执行,以便事件有时间传播到父元素。

示例代码:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
myButton.addEventListener('click', (event) => {
  setTimeout(() => {
    // 在这里处理单击事件
  }, 0);
});

在这个例子中,我们使用 setTimeout() 将事件处理程序延迟了 0 毫秒,以确保它以稍微延迟的方式执行。这个方法可以确保事件先冒泡后获取,因为事件处理程序在一小段时间后执行,以便事件有时间传播到父元素。

以下是一个使用事件委托的案例代码演示,该代码演示了如何在单击多个按钮时执行相同的操作:

HTML 代码:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
<ul id="myList">
  <li><button>Button 1</button></li>
  <li><button>Button 2</button></li>
  <li><button>Button 3</button></li>
</ul>

JavaScript 代码:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
const myList = document.querySelector('#myList');
myList.addEventListener('click', (event) => {
  if (event.target.tagName === 'BUTTON') {
    // 在这里处理单击事件
    console.log(`Clicked button with text: ${event.target.textContent}`);
  }
});

在这个例子中,我们将单击事件监听器添加到 myList 元素上,并使用 if 语句检查被单击的元素是否为按钮。如果是,我们就会在控制台中记录被单击的按钮的文本内容。由于我们使用了事件委托,因此无论用户单击哪个按钮,事件处理程序都会在 myList 元素上执行,并且事件对象中包含有关被单击的按钮的信息。这确保了事件先冒泡后获取,因为我们将监听器添加到父元素上,而不是每个子元素上。

总结

在事件处理中,事件冒泡和事件捕获是两种常见的事件传播机制。默认情况下,事件先捕获后冒泡。如果想要事件先冒泡后获取,可以使用以下两种方法之一:

  1. 使用事件委托(Event Delegation):将单个事件监听器添加到父元素上,以处理其子元素上的事件。由于事件冒泡会在整个文档中传播,因此在父元素上添加事件监听器可以确保事件先冒泡后获取。
  2. 使用 setTimeout():将事件处理程序延迟一小段时间再执行,以确保事件有时间传播到父元素。由于事件冒泡是在异步方式下完成的,因此使用 setTimeout() 函数可以确保事件先冒泡后获取。

在实际应用中,可以根据需要选择其中任何一种方法,以确保事件先冒泡后获取。

仓库地址:https://github.com/webVueBlog/WebGuideInterview

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

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

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

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

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
详解JavaScript事件处理程序
事件是用户与浏览器进行交互的方式。譬如用户点击按钮就会产生click事件,浏览器会找到相应js代码并执行,我们要做的就是按照规则编写js代码放在指定位置即可。
Learn-anything.cn
2021/12/26
8670
13事件
IE8中提供的事件监听器为:element.attachEvent(eventName,functionName)
Dreamy.TZK
2020/04/24
7800
【Web前端】嵌套元素的“事件”冒泡?!
事件处理是创建交互式用户界面的关键部分,浏览器通过事件系统让我们能够捕获和响应用户的输入,比如点击、鼠标移动、键盘输入等。
一条晒干的咸鱼
2024/11/19
920
【Web前端】嵌套元素的“事件”冒泡?!
DOM事件的传播机制
DOM事件的传播机制是指当一个事件在DOM树中触发时,它是如何在各个元素之间传播的。DOM事件传播机制分为三个阶段:捕获阶段、目标阶段和冒泡阶段。此外,还有一种常用的技术称为事件委托,它能够简化事件处理程序的绑定和管理。本文将详细介绍这些概念,并提供相应的代码示例。
can4hou6joeng4
2023/11/17
2110
深入理解JavaScript中的事件委托与事件代理
在JavaScript的开发中,事件处理是构建动态、交互式逻辑的关键。事件委托和事件代理,作为高效的事件处理策略,不仅优化了性能,还提升了代码的可维护性
iwhao
2024/07/05
2180
javascript入门到进阶 - 事件冒泡和事件委托详解
如果你点击了页面中的 li 标签,那么这个click事件会按照如下 (1)li (2)ul (3)body (4)html (5)document 也就是说click事件首先在 li 元素上触发, 而这个元素就是我们点击的元素,然后点击事件沿着DOM树向上传播 在每一个节点上触发,直到传播到document对象 我自己画了一个事件冒泡的示意图如下
公众号---人生代码
2020/07/14
6130
JavaScript事件详解
想必大家对JavaScript的事件都不陌生吧,大多数在网站开发的时候都会用到,这也是JavaScript的基本功之一,本文就为各位梳理一下相关知识。
用户8983410
2021/09/19
7260
JavaScript基础-事件监听与处理
在Web开发中,事件驱动编程是核心机制之一,它使得页面能够响应用户的操作,如点击、滚动、键盘输入等。JavaScript提供了强大的事件监听与处理机制,让开发者能够轻松地为DOM元素绑定事件处理程序。本文将深入浅出地介绍JavaScript事件模型、绑定与解除事件监听器的方法,以及在实际应用中常见的问题与易错点,并通过代码示例给出避免策略。
Jimaks
2024/06/12
3040
前端系列第1集-什么是Dom事件流?
DOM 事件流(DOM Event Flow)是指在 HTML 或 XML 文档中,由用户或浏览器执行的事件的传递路径。当一个事件在一个元素上触发时,它会在该元素上被处理,然后逐级向上冒泡直到文档根节点,这就是事件冒泡。在事件冒泡的过程中,每个处理函数都可以阻止事件继续向上冒泡,也可以停止事件默认行为。
达达前端
2023/10/08
2190
【前端】详解JavaScript事件代理(事件委托)
事件代理(Event Delegation),又称之为事件委托。是JavaScript中常用绑定事件的常用技巧。
程序员洲洲
2024/06/11
6750
【前端】详解JavaScript事件代理(事件委托)
企业面试题: 实现一个事件委托(事件代理)
考核内容: 事件委托:它还有一个名字叫事件代理,事件委托就是利用事件冒泡,只指定一个事件处理程序,就可以管理某一类型的所有事件。
舒克
2019/08/09
7940
JavaScript面试问题:事件委托和this
JavaScript不仅门槛低,而且是一门有趣、功能强大和非常重要的语言。各行各业的人发现自己最混乱的选择是JavaSscript编程语言。由于有着各种各样的背景,所以不是每个人都对JavaScript及其基本原理有广泛的认识。通常来书,除非你去参加工作面试才会去思考为什么或者怎么做,否则JavaScript只是你工作的内容。 这个系类的目标是深入探讨JavaScript的一些概念和理论。主题来自于 Darcy Clarke的JavaScript典型面试问题列表。希望你不仅仅是为了答案而阅读完这篇文章,每一
前朝楚水
2018/04/02
1.3K0
Web前端学习 第3章 JavaScript基础教程16 事件流
想要给一个元素绑定事件,我们有两种方法:使用内联事件或事件监听器。在之前的课程中,我们一直使用的是内联事件来为元素绑定事件,例如一个按钮的点击事件,代码如下
学习猿地
2020/06/17
7530
Web前端学习 第3章 JavaScript基础教程16 事件流
事件高级
eventTarget.addEventListener()方法将指定的监听器注册到 eventTarget(目标对象)上,当该对象触发指定的事件时,就会执行事件处理函数。
星辰_大海
2020/09/30
1.4K0
前端成神之路-WebAPIs03
node.removeChild() 方法从 node节点中删除一个子节点,返回删除的节点。
海仔
2020/12/29
3K0
浅谈JavaScript的事件(事件委托)
  事件处理程序为Web程序提供了系统交互,但是如果页面中的事件处理程序太多,则会影响页面的性能。每个函数都是对象,都会占用内存,内存中对象越多,性能越差。需要事先为DOM对象指定事件处理程序,导致访问DOM的次数增多,会延迟整个页面的交互就绪时间。 事件委托   对事件处理程序过多的解决方案是使用事件委托。事件委托利用了事件冒泡,只指定一个事件处理程序,就可以管理某一类型的所有事件。比如click事件会一直冒泡到document,也就是说我们只需为整个页面指定一个onclick事件处理程序,而不必为每个需
水击三千
2018/02/27
1.1K0
事件委托和this
  事件的第一个阶段是捕获阶段。事件从文档的根节点流向目标对象节点。途中经过各个层次的DOM节点,并在各节点上触发捕获事件,直到到达事件的目标节点。捕获阶段的主要任务是建立传播路径,在冒泡阶段,事件会通过这个路径回溯到文档跟节点。
超然
2018/08/03
8260
《现代Javascript高级教程》深入理解事件处理和传播机制
JavaScript中的事件流是一种机制,用于描述和处理事件在DOM树中的传播过程。了解事件流的属性和工作原理对于编写高效的事件处理代码和实现复杂的交互功能至关重要。本文将详细介绍JavaScript事件流的发展流程、属性以及应用场景,并提供一些代码示例和引用资料,帮助读者深入理解并应用这一重要的前端技术。
linwu
2023/07/27
2500
JavaScript事件
JavaScript事件 对于事件来讲,首先,我们需要了解这样几个概念:事件;事件处理程序;事件类型;事件流;事件冒泡;事件捕获;事件对象;事件模拟,事件方面的性能优化(事件委托、移除事件处理程序); 事件的概念 事件:指的是文档或者浏览器窗口中发生的一些特定交互瞬间。我们可以通过监听器(或者处理程序)来预定事件,以便事件发生的时候执行相应的代码。 事件处理程序:我们用户在页面中进行的点击这个动作,鼠标移动的动作,网页页面加载完成的动作等,都可以称之为事件名称,即:click、mousemove、loa
汤高
2018/01/11
2K0
JavaScript事件
事件高级
给元素添加事件,称为注册事件或者绑定事件。 注册事件有两种方式:传统方式和方法监听注册方式
梨涡浅笑
2022/05/08
1.2K0
事件高级
相关推荐
详解JavaScript事件处理程序
更多 >
领券
社区富文本编辑器全新改版!诚邀体验~
全新交互,全新视觉,新增快捷键、悬浮工具栏、高亮块等功能并同时优化现有功能,全面提升创作效率和体验
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文