JavaScript之 事件委托? 如果阻止事件冒泡?

js:javascript中的事件体系:常见事件、事件监听、事件移除、事件冒泡、事件捕获、事件委托、阻止事件 javascript中的事件体系:常见事件、事件监听、事件移除、事件冒泡、事件捕获、事件委托、阻止事件 阅读详情

什么是事件委托?

         事件委托就是利用冒泡的原理,将事件加到 父元素 或 祖先元素上,触发执行效果!

说起事件委托我们先来了解一下事件的三个阶段:

        1. 事件捕获阶段(从外到内)

            产生事件的时候会从document发出一个事件流,这个事件流随着我们的DOM树流向触发事件的目标;

       2. 事件目标阶段

           如果这个目标上有事件,则会被触发;如果没有,在当前目标上没有事件触发;

       3. 时间冒泡阶段(从内到外)

           如果祖先元素绑定有事件,那么这个事件会被依次触发,从内到外的顺序; 

例子:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <meta http-equiv="X-UA-Compatible" content="ie=edge">
    <title>事件委托练习</title>
    <script src="../../../jquery.min.js"></script>
    <style>
        .one {
            width: 500px;
            height: 500px;
            background-color: aquamarine;
            margin: 100px 500px;
        }
        .two {
            width: 300px;
            height: 300px;
            background-color: rgb(222, 245, 17);
        }
    </style>
</head>
<body>
    <div class="one">
        <div class="two"></div>
    </div>
    <script>
        $('.one').on('click',function(){
            alert('您点击的是第一个盒子')
        })

        $('.two').on('click',function(){
            alert('您点击的是第二个盒子')
        })
    </script>
</body>
</html>

  如题:给两个盒子绑定点击事件,但是我想要的结果是点击第二个盒子的话弹出框,这时你会发现,第二个盒子点击之后紧接着第一个盒子也会弹出框,这就是事件冒泡;

看下什么是事件冒泡?

          事件冒泡,就是元素自身的事件被触发后,如果父元素有相同的事件,如onclick事件,那么元素本身的触发状态就会传递,也就是冒到父元素,父元素的相同事件也会一级一级根据嵌套关系向外触发,直到document/window,冒泡过程结束!

那如何阻止时间冒泡?

          使用  e(event).stopPropagation()  起到阻止捕获和冒泡阶段中当前事件的进一步传播。

    事件对象e : 事件触发的时候会自动生成一个事件对象,生命周期是从事件开始到事件结束,有位置信息(事件本身是谁)、触发的事件类型、触发的事件元素等......

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <meta http-equiv="X-UA-Compatible" content="ie=edge">
    <title>事件委托练习</title>
    <script src="../../../jquery.min.js"></script>
    <style>
        .one {
            width: 500px;
            height: 500px;
            background-color: aquamarine;
            margin: 100px 500px;
        }
        .two {
            width: 300px;
            height: 300px;
            background-color: rgb(222, 245, 17);
        }
    </style>
</head>
<body>

    <div class="one">
        <div class="two"></div>
    </div>

    <script>
        $('.one').on('click',function(){
            alert('您点击的是第一个盒子')
        })

        $('.two').on('click',function(e){
            e.stopPropagation(); // 阻止事件冒泡,如果不阻止的话就会你点第二个的话结束之后第一个也会弹出
            alert('您点击的是第二个盒子')
        })
    </script>
</body>
</html>

这样就不会出现点第二个盒子第一个盒子也会弹出框!

拓展问题:如果第二个盒子是通过js增加的元素,没有事件;该如何解决?

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <meta http-equiv="X-UA-Compatible" content="ie=edge">
    <title>事件委托练习</title>
    <script src="../../../jquery.min.js"></script>
    <style>
        .one {
            width: 500px;
            height: 500px;
            background-color: aquamarine;
            margin: 100px 500px;
        }
        .two {
            width: 300px;
            height: 300px;
            background-color: rgb(222, 245, 17);
        }
    </style>
</head>
<body>
    <div class="one">
        <!-- <div class="two"></div> -->
    </div>
    <script>
        //如果是你之后添加的元素 怎么办?
        $(`<div class="two"></div>`).appendTo('.one');
        
        $('.one').on('click','.two',function(e){
            e.stopPropagation(); // 阻止事件冒泡,如果不阻止的话就会你点第二个的话结束之后第一个也会弹出
            alert('您点击的是第二个盒子')
        })
    </script>
</body>
</html>

使用事件委托,将当前元素的事件委托给祖先元素(需要注意的是 当前的事件必须是祖先元素的子元素)。

 

【JS笔记】JS常见的事件、事件传播、事件解绑、事件委托、阻止事件冒泡、阻止默认行为、正则表达式 JS中的事件是由三部分组成的,分别是:事件源、事件类型、事件处理函数。事件源是指:谁触发了事件;事件类型是指:触发了什么事件;事件处理函数是指:触发事件之后,应该做什么事情。 阅读详情

相关推荐

晶圆测试(Wafer Sort)的核心技术与良率提升策略

晶圆测试(Wafer Sort)是芯片制造中的关键“入学考试”,通过探针台与自动测试设备(ATE)对晶圆上的芯片进行功能与参数测试,筛选不合格芯片以控制成本。本文深入解析了其核心技术,包括自动化视觉系统对准、测试流程优化策略,并探讨如何利用测试数据驱动良率提升,展望了DFT与AI智能测试的未来趋势。

e4f5g6h的博客 517

阻止事件冒泡方法

阻止事件冒泡方法 1.event.stopPropagation()方法 这是阻止事件的冒泡方法,不止事件向document上蔓延,但是默认事件任然会执行,当你调用这个方法的时候,如果点击一个连接,这个连接仍然会被打开 2.event.preventDefault()方法 这是阻止默认事件的方法,调用此方法时,链接不会被打开,但是会发生冒泡,冒泡会传递到上一层的父元素 3.return false; 这个方法比较暴力,他会同时阻止事件冒泡也会阻止默认事件,不仅阻止了事件往上冒泡,而且阻止了事件本身

weixin_57157220的博客 1万+

tiny4412用 usb 连接计算机显示sec s5pc210 test b/d 解决方法

当我用USB线连接tiny4412的microUSB端口的时候,出现了驱动没有正常安装,显示“sec s5pc210 test b/d” 出现这种问题的原因有: 1、没有安装到正确的USB驱动; 2、SD卡没有插好 我出现问题的原因属于第二种,插入SD卡后,上电后,LCD屏亮了,但没有任何显示   解决方法是:     更换一张SD卡,重新插入开发板卡槽,上电开

karaskass的博客 3231

快速了解4种阻止事件冒泡的方法(原生js阻止,vue中使用修饰符阻止)

快速理解阻止事件冒泡的4种方法,使用原生js或者vue中阻止事件冒泡

m0_48895748的博客 1万+

自动驾驶仿真:基于Carsim开发的加速度请求模型

1、自动驾驶行业中,算法端对于纵向控制的功能预留接口基本都是加速度,我们需要给控制器仿真加速度的信号,控制器才会实现对纵向功能的控制。2、Carsim或者其他动力学软件,主要提供者节气门开度和主缸压力进行控制。我们在进行联合仿真时,往往都要通过PID的方式将请求加速度转换成对应的节气门开度与主缸压力传给动力学软件进行闭环控制。

zataji的博客 6914

工业视觉开发者的福音:用C#玩转VisionMaster算子(非方案版完整教程)

本文为工业视觉开发者提供了一份完整的C#与VisionMaster算子二次开发教程,详细介绍了环境配置、算子调用原理、性能优化技巧及实战案例。通过模板匹配和二维码识别等实例,展示了如何高效集成VisionMaster算子到现有框架中,提升工业自动化视觉检测系统的灵活性和性能。

weixin_29280657的博客 271

点击事件 事件委托的情况下实现阻止冒泡

最近在研究react的事件,都说他是合成事件,整个dom唯一绑定事件的是document。 我想这不就是事件委托么,有啥好研究的,于是我去重温了下事件委托,顺便看了阻止冒泡。突然突发奇想,如果两个结合在一起呢?能否实现子节点点击了,父节点不能触发点击事件好像n年前我还是小萌新,在广电商做切图仔的时候请教过我的组长,他没有给到我满意的答案。今天这个想法又冒出来了。 我得解决它一下。它用了 e.nativeEvent.stopImmediatePropagation(); nativeEvent.stopImm

小漠007的专栏 739

uniapp - 详细手机端h5网页调用手机摄像头进行二维码识别扫描,在uniapp的H5移动端微信网页平台中,在浏览器中调用手机扫码功能详细教程,识别二维码并获取扫描结果(完整示例源码,一键复制即用

uniapp,h5,手机端网页,H5手机网页,uniapp开发h5实现扫码功能,uniapp微信h5网页扫码sdk使用教程,uniapp h5网页如何实现浏览器扫码,uniapp扫码功能怎么兼容h5_uniapph5怎么做扫码功能,uniapp的手机网页如何实现扫二维码一维码,浏览器H5实现js扫码,H5调用摄像头和扫一扫功能,亲测可用,H5调用本地摄像头实现扫一扫,uni-h5项目解决扫码功能,uniapp实现微信H5扫码,解决uniapp在H5端使用不能扫码问题,uni-app的h5扫码(二维码、条形码

✅ 精选推荐文章 1万+

如何阻止事件冒泡

1、事件处理过程中,阻止了事件冒泡,但不会阻止默认行为(执行超链接的跳转)2、事件处理过程中,阻止了事件冒泡,也阻止了默认行为(不执行超链接的跳转)3、事件处理过程中,不阻止事件冒泡,但阻止默认行为(父元素以上全部会触发该事件,但不执行超链接跳转)

庸人方自扰,自在就好 1万+

SAP 权限配置(复合角色)

复合角色创建步骤:业务场景:通常单一角色权限颗粒度划分比较细,当需要分配单一角色权限A、B(多个单一角色)给某账号用户Y时,可以先建立一个复合角色C,将A、B绑定到复合角色C中,再将角色C分配给账号Y即完成权限配置。 业务模拟: 1、PFCG创建复合角色: 2、在角色页面添加子角色 在角色分页内添加子角色,点击“菜单”分页中的“读菜单”即可导入子角色中的菜单: 3、将用户分配给...

willieyuan的博客 7087

基于Simulink的自适应反步法(Adaptive Backstepping)控制​

本文针对非线性系统控制中未知参数和强非线性耦合的挑战,提出基于Simulink的自适应反步法解决方案。通过融合参数在线估计与反步递归设计,该方法显著提升了永磁同步电机(PMSM)速度控制的鲁棒性,使跟踪误差从20%降至3%,参数估计收敛时间小于0.5秒。文章详细阐述了从算法推导到Simulink实现的完整流程,包括系统架构设计、核心算法推导(以PMSM为例)、模块化建模方法、参数优化策略以及工程部署建议。提供的自适应控制器MATLAB代码和关键参数表可直接应用于实际工程,为电机驱动、机械臂等非线性系统控制提

xiaoheshang_123的博客 101

事件冒泡和事件委托

事件流:事件执行顺序我们叫他事件流。事件流中事件冒泡的由来:IE公司认为,如果你面前有个靶子,你的飞镖射中了其中一环,并不仅仅是只对这一环产生了操作,而是对整个靶子都产生了操作。所以,当最里面的元素触发了事件的时候,会依次向上触发所有元素的相同事件(从触发事件的元素开始一直向上触发),但是事件冒泡对我们几乎没有任何好处,所以我们需要阻止事件冒泡,禁止之后事件只会停留在当前层。通俗的来讲就是:触发子元素身上的事件也可以触发父元素身上同等类型事件。

zzy18203753038的博客 1749

基于多传感器融合的智身四足机器狗楼梯环境SLAM系统设计与实现

本文设计了一种基于多传感器融合的四足机器狗楼梯环境SLAM系统。系统采用Jetson Orin NX为主控制器,集成RealSense D435i深度相机和Livox Mid360激光雷达,在ROS2框架下实现平面定位精度<5cm、楼梯环境下导航不漂移的目标。通过多层次传感器融合策略、运动学约束优化和状态切换机制,解决了楼梯环境下的定位累积误差问题,实现了平面与楼梯环境的自动识别切换及精度复位功能。硬件设计注重传感器布局优化和精确标定,软件架构采用分层设计,确保实时性能。该系统为四足机器人在复杂地形中

huanghm88的专栏 241

JS中的DOM相关、事件绑定、事件委托、冒泡、捕获、阻止默认行为

JS中的DOM相关、事件绑定、事件委托、冒泡、捕获、阻止默认行为。

SignalFire的博客 931

IEM模型,地表粗糙度模拟

利用微波反演土壤水分时候,利用IEM模型可以实现对随机地表的模拟

SIMATIC S7-1200, S7-1500 PID 控制[手册]

SIMATIC S7-1200, S7-1500 PID 控制[手册]

js几种常见的方法封装(阻止事件冒泡、事件委托、随机数),方便调用

       对于有的方法,逢用便创建,显得太麻烦不说,无形之中增加了我们的工作量,于是我们可以将常用的一些方法进行封装,以后我们就可以随用随拿啦。 注意:        在封装一个方法之前,我们要先给方法起一个名字,最好是语义化名字,方便以后的理解,对优化...

huangfuyk.的博客 7647

Devexpress16.2.6破解工具

Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具

前端知识点---事件委托和机制-阻止冒泡机制-阻止默认行为机制(javascript)

事件委托是一种将事件监听器绑定到父元素上,利用事件冒泡机制来处理子元素事件的技术。事件冒泡:当一个元素上的事件被触发时,事件会从目标元素向上冒泡到其父元素,直至根元素(document)。e.stopPropagation():阻止事件从当前目标元素继续向上冒泡,不会触发父元素的事件监听器。e.stopPropagation() 的作用是 阻止事件继续冒泡,让事件不会再传递到父元素。e.stopPropagation() 只阻止事件冒泡,不会阻止同一元素上的其他事件执行。

2302_80171619的博客 1835

汉书HE8,好用的汇编代码编写工具

汉书HE8,好用的汇编代码编写工具早期编写汇编代码所用功能强大

js 事件冒泡与阻止冒泡、事件委托

一.定义 事件冒泡 :IE的事件流叫做事件冒泡,即事件开始时由最具体的元素(文档中嵌套层次最深的那个节点)接收,然后逐级向上传播到较为不具体的节点(文档)。 事件捕获 :事件捕获的思想是不太具体的节点应该更早接收到事件,而最具体的节点应该最后接收到事件。 事件委托:事件委托利用了事件冒泡,只指定一个事件处理程序,就可以管理某一类型的所有事件。 二. 关于事件冒泡与阻止事件冒泡的用法: ...

zhenzuo_x的博客 908

【JavaScript】学习第十四天(事件传播、阻止事件冒泡、事件委托)

1.事件流(事件传播) 概念: 描述页面接收事件的顺序,事件发生时,事件会在元素节点之间按照特定的顺序,依次传播。 思考: 互相嵌套的div,同时给每个元素绑定了不同结果的相同事件,事件会如何传播 IE提出的是冒泡流: 事件开始时由最具体的元素接收,然后逐级向上到DOM顶级节点 网景提出的是捕获流: 事件开始时从DOM顶级节点开始,然后逐层向下传递到最具体的元素 W3C规范: js事件传播流程主要有三个阶段: 事件捕获阶段:从window向 目标 传递的过程 处于目标阶段:具体点击的是谁?事件发生在目标身

wu12378900的博客 1231

js中的事件模型?如何阻止事件冒泡?如何实现事件委托?

事件委托 它还有一个名字叫事件代理,JavaScript高级程序设计上讲:事件委托就是利用事件冒泡,只指定一个事件处理程序,就可以管理某一类型的所有事件 例子: <ul id="ul1"> <li>111</li> <li>222</li> <li>333</li> <li>444</li> </ul> //事件委托的方式 window.onload =

HZ___ZH的博客 463

js 事件委托 阻止事件冒泡---

学习笔记

ataUFO的博客 522

JS-事件委托-阻止事件冒泡和阻止默认行为-滚动事件-加载事件-元素尺寸位置

目录1.事件委托2.阻止事件冒泡和阻止默认行为3.滚动事件4.加载事件5.元素尺寸和位置offset 家族client 家族scroll 家族 2.阻止事件冒泡和阻止默认行为 阻止冒泡是就让事件不再从子级向父级【传播】在事件回调函数中通过 ev.stopPropagation()一些标签自带了某些功能,比较典型的两个:a 标签 和 form 标签事件回调中的 ev.preventDefault()scroll 事件与 click input change keyup 等,没有什么本质上的区别。load

m0_62181310的博客 1295

JS7day(事件对象,事件流,事件捕获和冒泡,阻止事件流动,事件委托,学生信息表案例)

事件对象是什么? 也是个对象,这个对象里有事件触发时的相关信息 例如:鼠标点击事件中,事件对象就存了鼠标点在哪个位置等信息如何获取? 在事件绑定的回调函数的第一个参数就是事件对象 一般命名为、、 img要用到绝对定位 加上代码: 事件流 事件流指的是事件完整执行过程中的流动路径:先捕获后冒泡 事件捕获概念: 从DOM的根元素开始去执行对应的事件 (从外到里) 说明: 第三个参数传入代表是捕获阶段触发() 若传入代表冒泡阶段触发,默认就是 若是用 L0 事件监听,则只有冒泡阶段,没有捕获 事件冒

shrimper 560

JS复习12:事件高级3(事件对象与阻止事件冒泡与事件委托)

JS复习12:事件高级(事件对象与阻止事件冒泡与事件委托) 一、什么是事件对象 <style> div { width: 100px; height: 100px; background-color: pink; } </style> </head> <body> <div>123</div> <scr

好汤圆的博客 164

【JS】事件流、事件冒泡、事件捕获、阻止冒泡、事件委托

目录 事件: 什么是事件流 事件冒泡事件捕获 DOM事件处理 DOM0 DOM2 一个DOM元素同时绑定冒泡捕获,执行顺序: 阻止冒泡 阻止冒泡方法封装 Event事件对象的使用 事件委托 什么是事件委托 实现事件委托 事件委托的优点: 事件: JavaScript和HTML之间的交互是通过事件实现的。事件,就是文档或浏览器窗口发生的一些特定的交互瞬间。可以使用监听器(或事件处理程序)来预定事件,以便事件发生时执行相应的代码。通俗的说,这种模型其实就是一个观察者模式。 ..

m0_48982503的博客 1141

JavaScript事件冒泡,阻止冒泡,事件委托(代理)

事件冒泡,事件委托与如何阻止冒泡1.事件冒泡2.使用stopPropagation()阻止冒泡3.事件委托(事件代理)(1)原理(2)作用(3)举例 1.事件冒泡 <div class="father"> <div class="son">儿子</div> </div> <script> var son = document.querySelector('.son'); son.addEventListener('click',function(

l ﹉x `。的博客 291

js绑定事件处理函数/解除事件处理程序/事件冒泡、事件捕获/取消冒泡/ 阻止默认事件/事件对象/事件委托

事件 绑定事件处理函数 ele.onxxx = function(event){} <div onclick="console.log('a')"></div> var div = document.getElenmentsByTagName('div')[0]; div.onclick = function(){ this.style.backgroundColor = 'green'; } 兼容性很好,但是一个元素

Sunset_Sunshine的博客 363
上一篇: JQuery 筛选
下一篇: 数组去重,封装数组去重
昨夜太平长安888
博客等级 码龄9年 1万+粉丝 176原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值