前端面试宝典 每日一题(17)能说说你对Javascript 事件冒泡、捕获的理解吗?

🧑🏻‍写在前面的话:
这个系列文章可能开始,有人会觉得很low,我是打算从H5先开始整理,最后到常见的前端框架、以及一些前端常见的算法、leetcode的一些算法解析,感兴趣的小伙伴可以持续关注,每天分享一个前端知识点,希望大家一起进步。

这篇文章主要给大家整理了JS中比较主要的一个知识点、事件相关的知识,主要从1.冒泡、2.捕获,两个方面入手、整理,结合一些小的demo演示

首先叫讲一下事件冒泡,在说事件冒泡之前,先说一js 事件执行的流程,如图:

在这里插入图片描述

从图中我们能明显的看出来,js的事件响应过程是,从外到内,然后在从内到外,会先进事件捕获,然后再进行事件冒泡。

1.冒泡

首先关于冒泡的解释:当一个事件发生在一个元素上,它会首先运行在该元素上的处理程序,然后运行其父元素上的处理程序,然后一直向上到其他祖先上的处理程序。

<form onclick="alert('form')">FORM
	<div onclick="alert('div')">DIV
		<p onclick="alert('p')">P</p>
	</div>
</form>		

点击内部的 p标签,onclick的运行顺序如下:

  • 首先会在该 p 上的。
  • 然后是外部 div 上的。
  • 然后是外部 form 上的。

以此类推,直到最后的 document 对象。因为事件从内部元素“冒泡”到所有父级,就像在水里的气泡一样
冒泡事件从目标元素开始向上冒泡。通常,它会一直上升到 html,然后再到 document 对象,有些事件甚至会到达 window。
也可以通过event.stopPropagation() 阻止事件冒泡。

2.捕获

捕获,事件处理的另一个阶段被称为”捕获",和事件冒泡的顺序相反,一般情况下,我们通过addEventListener监听到的默认是事件冒泡的结果,我们如果想要利用事件捕获来达到一些目标,那我我们可以通过给addEventListener添加参数的方式实现:

elem.addEventListener(..., {capture: true})
// 或者,用 {capture: true} 的别名 "true"
elem.addEventListener(..., true)		

通过以上两种方式,我们就可以将将默认冒泡事件,改成边成为捕获事件。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值