博客
关于我
事件冒泡、捕获?如何阻止
阅读量:388 次
发布时间:2019-03-05

本文共 1891 字,大约阅读时间需要 6 分钟。

事件冒泡与事件捕获

事件冒泡

事件冒泡是指当点击某个元素时,由目标元素开始向上冒泡,依次触发父元素的点击事件。具体而言,点击子元素会向祖先元素依次触发事件。以下示例展示了事件冒泡的工作原理:

  • 事件处理顺序:当点击box元素时,会依次触发以下事件:
  • box的点击事件
  • wraper的点击事件
  • content的点击事件
// 事件冒泡示例const box = document.querySelector('.box');const wraper = document.querySelector('.wraper');const content = document.querySelector('.content');box.addEventListener('click', (e) => {    console.log('box冒泡');}, false); // 事件冒泡使用false参数wraper.addEventListener('click', (e) => {    console.log('wraper冒泡');}, false);content.addEventListener('click', (e) => {    console.log('content冒泡');}, false);

事件捕获

事件捕获的特点是事件处理顺序相反,事件从目标元素开始,从上到下触发。与事件冒泡相比,仅需将事件监听的第三个参数设置为true即可实现。

// 事件捕获示例box.addEventListener('click', (e) => {    console.log('box捕获');}, true); // 事件捕获使用true参数wraper.addEventListener('click', (e) => {    console.log('wraper捕获');}, true);content.addEventListener('click', (e) => {    console.log('content捕获');}, true);

事件冒泡与捕获的优先级

在同一个元素上注册多个事件时,事件捕获会优先于事件冒泡执行。以下示例展示了事件处理顺序:

// 事件捕获box.addEventListener('click', (e) => {    console.log('box捕获');}, true);wraper.addEventListener('click', (e) => {    console.log('wraper捕获');}, true);content.addEventListener('click', (e) => {    console.log('content捕获');}, true);// 事件冒泡box.addEventListener('click', (e) => {    console.log('box冒泡');}, false);wraper.addEventListener('click', (e) => {    console.log('wraper冒泡');}, false);content.addEventListener('click', (e) => {    console.log('content冒泡');}, false);

结果显示,事件捕获先于事件冒泡执行。

阻止事件捕获与冒泡

要阻止事件捕获或事件冒泡,可以使用e.stopPropagation()方法。以下示例展示了如何阻止事件传播:

// 阻止事件捕获和冒泡box.addEventListener('click', (e) => {    e.stopPropagation();    console.log('box冒泡');}, false);wraper.addEventListener('click', (e) => {    console.log('wraper冒泡');}, false);content.addEventListener('click', (e) => {    console.log('content冒泡');}, false);

需要注意的是,IE浏览器的事件对象与其他浏览器存在差异,建议在跨浏览器开发时谨慎使用.stopPropagation()方法。

转载地址:http://nkhwz.baihongyu.com/

你可能感兴趣的文章
Redis 配置文件redis.conf详细解释
查看>>
python网络爬虫(2)——scrapy框架的基础使用
查看>>
python网络爬虫实例教程试读_Python网络爬虫实战教程(全套完整版) - 学途无忧网 - 做技术的王者 - Powered By EduSoho...
查看>>
Python 使用哈希函数用于加密
查看>>
Python 依赖管理的革新——Poetry 深度解析
查看>>
python 保留精度及增加去除数字的千位分隔符(金额化数字)
查看>>
python 倒计时 9,8,7,。。。。。。0
查看>>
Python 入门开发学习笔记之数据的增删改查
查看>>
Python 入门教程(2)搭建环境 2.4、VSCode配置Node.js运行环境
查看>>
Python 八大排序算法合集
查看>>
python 关于epoll的学习
查看>>
Python 内存管理
查看>>
Python 内嵌函数:它们有什么用处?
查看>>
Python 内置 sum 函数 vs. for 循环性能
查看>>
python 内置slice的用法
查看>>
Python 内置时间模块
查看>>
python 内部如何实现命名元组?
查看>>
Python 写Android App性能:入门到高级
查看>>
python 写入json数据到数据库
查看>>
Python 出现 TypeError: ‘encoding‘ is an invalid keyword argument for this function 解决方法
查看>>