javaScript:事件冒泡和事件捕获

2023-09-20 15:36:55

目录

什么情况下需要考虑事件冒泡

事件冒泡的过程

事件捕获 

相关代码 

阻止事件冒泡的方法 


什么情况下需要考虑事件冒泡

    需要考虑事件冒泡的条件

    1.同一个页面区域内,具有多个元素

    2.这些元素相互构成父子关系

    3.这些元素同时绑定了相同的事件

事件冒泡的过程

事件冒泡的过程

    从最内层元素最先开始,执行事件绑定的函数,函数执行完毕后,冒泡的父级上,查看父级元素有没有绑定事件,如果有,则执行父级元素上的该事件,如果没有则继续往上一级元素冒泡,查找事件,执行事件,冒泡最终的截止位置是 document

事件捕获 

事件捕获

1.事件捕获是事件冒泡的反过程,时间冒泡先执行,然后从document开始,一直执行到事件出发元素。

2.只有通过 addEventListener(事件名,执行方法,true) 事件才会在 事件捕获阶段执行。

3.一般不用事件捕获。

相关代码 

let wp = document.querySelector('.wp');
let cont1 = document.querySelector('.cont1');
let cont2 = document.querySelector('.cont2');
// wp.onclick = function(){
//     alert('废寝忘食')
// }
// cont1.onclick = function(){
//     alert('三月不知肉味')
// }
// cont2.onclick = function(){
//     alert('民以食为天')
// }
// document.onclick = function(){
//     alert('辟谷')
// }

//设置事件捕获案例
cont2.addEventListener('click',function(){
    alert('高尚是高尚者的墓志铭')
},true) //true是否在事件捕获阶段执行
cont1.addEventListener('click',function(){
    alert('卑鄙')
},true) 
wp.addEventListener('click',function(){
    alert('面朝大海,春暖花开')
},true) 
document.addEventListener('click',function(){
    alert('海子')
},true) 

阻止事件冒泡的方法 

阻止事件冒泡的方法:

    1.使用事件对象的stopPropagation()方法,来阻止事件冒泡

    2.如果使用ie的 attachEvent 绑定事件,需要使用事件的event.cancelBubble = true;来阻止事件冒泡

    标准浏览器和ie高版本,无论什么方式绑定的事件,都可以使用stopPropagation()来阻止事件冒泡。

let far = document.querySelector('.far');
let son = document.querySelector('.son')

son.addEventListener('click',function(){
    alert('中午吃啥')
    console.log(event);
     event.stopPropagation();
})
far.addEventListener('click',function(){
    alert('中午吃泡馍')
})
document.addEventListener('click',function(){
    alert('中午吃麻辣烫')
})

更多推荐

Nginx配置文件详解

一、nginx的配置文件1、常见的配置文件及其作用nginx常见配置文件位置:安装路径/conf目录中。[root@centos7nginx]#tree.├──conf│├──fastcgi.conf│├──fastcgi.conf.default│├──fastcgi_params│├──fastcgi_params

pycharm中恢复原始界面布局_常用快捷键_常用设置

文章目录1恢复默认布局1.1直接点击file→ManageIDESettings→RestoreDefaultSettings(如下图所示):1.2直接点击RestoreandRestart,然后Pycharm就会自动重启,重启之后的界面就是最原始的界面了2改变主题2.1在PyCharm的右上角,点击“齿轮,然后点击:

ThreadPoolExecutor的使用

1.在SpringBoot项目中使用ThreadPoolExecutor:SpringBoot中可以通过创建一个配置类来定义ThreadPoolExecutor,然后在需要使用的地方直接注入即可。@ConfigurationpublicclassThreadPoolConfig{@BeanpublicExecutora

【OpenSSL】VC编译OpenSSL

VC编译OpenSSL编译工具准备编译OpenSSL建立`HelloWorld`工程创建VS工程编译工具准备安装好VisualStudio。安装Perl,主要是用来生成nmake的。准备好汇编语言编译工具nasm,并添加到path路径。下载好OpenSSL源代码。编译OpenSSL安装Perl,并加入到path路径,检

Sentinel控制台配置 持久化到nacos

sentinel控制台,使用方便,功能强大。使用官方的jar包,配置不会持久化,sentinel重启后会导致,之前的规则全部丢失,下面一起改造源码实现规则数据的持久化sentinel源码地址(github访问太慢,直接上镜像版)Sentinel:Sentinel是什么随着微服务的流行,服务和服务之间的稳定性变得越来越重

深入了解代理服务器:Socks5、IP代理与网络安全

在当今数字化时代,网络安全和数据采集对于网络工程师和爬虫开发者来说至关重要。代理服务器是一项关键技术,为保护隐私、绕过访问限制和提高网络安全提供了有力工具。本文将深入探讨几种不同类型的代理服务器,包括Socks5代理、IP代理,以及它们在网络安全和爬虫开发中的作用。1.Socks5代理:全能的代理协议Socks5代理协

什么是网络安全?网络安全包括哪几个方面?

提及网络安全,很多人都是既熟悉又陌生,所谓的熟悉就是知道网络安全可以保障网络服务不中断。那么到底什么是网络安全?网络安全包括哪几个方面?通过下文为大家介绍一下。什么是网络安全?网络安全是指网络系统的硬件、软件及系统中的数据受到保护,不因偶然的或者恶意的原因而遭受到破坏、更改、泄露,系统连续可靠正常地运行,网络服务不中断

由于数字化转型对集成和扩展性的要求,定制化需求难以满足,百数低代码服务商该如何破局?

当政策、技术环境的日益成熟,数字化转型逐步成为企业发展的必选项,企业数字化转型不再是一道选择题,而是决定其生存发展的必由之路。通过数字化转型升级生产方式、管理模式和组织形式,激发内生动力,成为企业顺应时代变化,实现高质量发展的必然选择。一般来说,实现数字化转型的方式有3种:采购已有的标准系统、定制外包或者选购低代码平台

iOS17适配指南-新版

文章目录一、iOS17适配点二、具体代码一、iOS17适配点UIView与UIViewController。可以设置数据为空时的占位视图,增加SymbolAnimations,通过addSymbolEffect()与removeSymbolEffect()方法,可以实现SFSymbols图标的添加与移除动画。UIPag

通讯网关软件007——利用CommGate X2Mbt实现Modbus TCP访问MSSQL服务器

本文介绍利用CommGateX2Mbt实现ModbusTCP访问MSSQL数据库。CommGateX2MBT是宁波科安网信开发的网关软件,软件可以登录到网信智汇(wangxinzhihui.com)下载。【案例】如下图所示,实现上位机通过ModbusTCP来获取MSSQL数据库的数据。【解决方案】设置网关机,与MSSQ

【Java核心】JDK、JRE、 JVM的联系与区别

个人简介:Java领域新星创作者;阿里云技术博主、星级博主、专家博主;正在Java学习的路上摸爬滚打,记录学习的过程~个人主页:.29.的博客学习社区:进去逛一逛~JDK、JRE、JVM的联系与区别1.简述2.是什么3.联系和区别1.简述简单来说:JDK是开发Java程序所需的工具包,包含了JRE,并且额外提供了开发工

热文推荐