首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

e.preventDefault();防止冒泡,但是我们如何防止捕获阶段进一步深入到子阶段

在事件处理过程中,事件会经历三个阶段:捕获阶段、目标阶段和冒泡阶段。e.preventDefault()是一个常用的方法,用于阻止事件的默认行为,例如阻止表单的提交或者超链接的跳转。

然而,e.preventDefault()只能阻止事件的默认行为,无法阻止事件的传播。如果我们希望在捕获阶段阻止事件进一步深入到子阶段,可以使用e.stopPropagation()方法。

e.stopPropagation()方法用于停止事件的传播,即阻止事件在DOM树中继续传递。当事件触发后,会从最外层的元素开始,逐级向下传播到目标元素,然后再逐级向上冒泡到最外层的元素。使用e.stopPropagation()可以在任意阶段停止事件的传播,包括捕获阶段和冒泡阶段。

需要注意的是,e.stopPropagation()只能阻止事件在当前元素的父级元素中继续传播,无法阻止事件在当前元素的子元素中继续传播。如果需要完全阻止事件的传播,可以结合使用e.stopPropagation()和e.preventDefault()。

总结起来,e.preventDefault()用于阻止事件的默认行为,e.stopPropagation()用于停止事件的传播。通过这两个方法的组合使用,可以实现对事件的完全控制。

腾讯云相关产品和产品介绍链接地址:

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

JavaScript阻止冒泡和取消默认事件(默认行为)

JavaScript冒泡捕获是事件的两种行为,使用event.stopPropagation()起到阻止捕获冒泡阶段中当前事件的进一步传播。...防止冒泡捕获 w3c的方法是e.stopPropagation(),IE则是使用e.cancelBubble = true stopPropagation也是事件对象(Event)的一个方法,用是阻止目标元素的冒泡事件...,但是会不阻止默认行为。...什么是冒泡事件?如在一个按钮是绑定一个”click”事件,那么”click”事件会依次在它的父级元素中被触发 。 stopPropagation就是阻止目标元素的事件冒泡父级元素。...window.event.returnValue == false; } } return false JavaScript的return false只会阻止默认行为,而是用jQuery的话则既阻止默认行为又防止对象冒泡

6.1K30

一次关于js事件出发机制反常的解决记录

这个阶段也被称为捕获阶段。 目标阶段:本次活动对象到达事件对象的事件的目标。这个阶段也被称为目标阶段。如果事件类型指示事件不起泡,则在完成此阶段后,事件对象将停止。...冒泡阶段:事件对象通过目标的祖先中传播以相反的顺序,开始与目标的父和与所述结束窗口。这个阶段也被称为冒泡阶段。...,打印依次为 s1 捕获方式 s1 冒泡方式 点击s2时,打印依次为 s1 捕获方式 s2 捕获方式 s2 冒泡方式 s1 冒泡方式 处理事件冒泡和默认事件 1、e.preventDefault(...} return false; } 最后的解决方法: 让我们回顾一下最初的问题,可能部分浏览器把事件的useCapture默认为true,导致点击元素时父元素的事件先响应了,于是我的办法是在父元素的事件里进行判断...我们经常能遇到阻止冒泡但是阻止捕获一般不会遇到,因为浏览器一般默认就给我们阻止了,只能说什么情况都有啊,万事还是得考虑周全。

1.5K50
  • js 事件笔记

    如果事件不传播,我们无法确定我们点击的对象是什么? 2、事件流三种模型 2.1事件冒泡模型 事件开始时由最具体的元素接收,然后逐级向上传播到较为不具体的元素。...比如点击div时,首先是div先监听到了点击事件,然后向上传播到body/html/document 2.2事件捕获模型 和事件冒泡相反,事件最开始由最外层不太具体的节点先监听到,然后向下传递最具体的元素...,最后是冒泡阶段 事件捕获阶段 处于目标阶段 事件冒泡阶段 ?...我这里不做赘述 2.5stopPropagation() 阻止事件在 DOM 中继续传播,防止再触发定义在别的节点上的监听函数,但是不包括在当前节点上其他的事件监听函数。...1、事件代理的原理: 利用事件模型的传播性质,将元素的监听函数绑定父元素上,通过事件传播去执行监听函数。

    11K21

    JavaScript 事件机制

    CAPTURING_PHASE,即捕获阶段 AT_TARGET,即目标阶段 BUBBLING_PHASE,即冒泡阶段 我们可通过事件对象的 eventPhase 属性,得知事件处于哪个阶段。...target 就是触发事件的具体对象,这时注册在 target 上的事件监听器处于目标阶段。 最后,事件再往上从 target 一路逆向传递根节点,若注册了事件监听器,则监听器处于冒泡阶段。...在 target 注册的监听器,不分捕获冒泡 既然我们得出了“先捕获,后冒泡”的结论,那么无论 addEventListener 的注册顺序如何改变,最终效果应该是一样的。理想很丰满,现实很骨感。...); e.preventDefault(); }, true); 结果是超链接的默认行为没有被执行,注意:不管是在捕获阶段还是在冒泡阶段,只要使用了 preventDefault 方法,即可取消默认行为的执行...但通过事件传播机制,我们可以在 ul 注册 eventListener 。 这样的好处有亮点: 节省内存 不需要给节点注销事件 参考资料 DOM 的事件傳遞機制:捕獲與冒泡

    85630

    事件

    级事件规定事件流包括三个阶段,事件捕获阶段,处于目标阶段,事件冒泡阶段,首先发生的是事件捕获,为截取事件提供机会,然后是实际目标接收事件,最后是冒泡阶段 ?...').onclick = function (e) { e.preventDefault(); } stopPropagation()方法可以停止事件在DOM层次的传播,即取消进一步的事件捕获冒泡...image.png DOM2级事件传播:有3个阶段捕获阶段:事件从document向元素一层层传递,直到目标元素 处于目标阶段:此时事件发生在目标元素上,被看做冒泡的一部分 冒泡阶段:和IE冒泡一样...image.png 4:如何阻止事件冒泡如何阻止默认事件?...: e.stopPropagation(); event.stopPropagation(): 阻止捕获冒泡阶段中当前事件的进一步传播。

    1.4K30

    React 进阶 - 事件系统

    比如: 给元素绑定的事件,不是真正的事件处理函数 在冒泡 / 捕获阶段绑定的事件,也不是在冒泡 / 捕获阶段执行的 在事件处理函数中拿到的事件源 e ,也不是真正的事件源 e React 为什么要写出一套自己的事件系统呢...:开发者正常给 React 绑定的事件比如 onClick,onChange,默认会在模拟冒泡阶段执行 捕获阶段:如果想要在捕获阶段执行可以将事件后面加上 Capture 后缀,比如 onClickCapture...onClickCapture ,就会 unshift 放在数组前面,以此模拟事件捕获阶段 如果遇到冒泡阶段事件 onClick ,就会 push 数组后面,模拟事件冒泡阶段 一直收集最顶端 app...,形成执行队列,在接下来阶段,依次执行队列里面的函数 # React 18 版本 # 老版本的问题 老版本的事件原理有一个问题就是,捕获阶段冒泡阶段的事件都是模拟的,本质上都是在冒泡阶段执行的:...-> 冒泡阶段 但是老版本的事件系统,一定程度上,不符合事件流的执行时机,但是在新版本 v18 的事件系统中,这个问题得以解决。

    1.2K10

    事件高级

    最终,w3c 采用折中的方式,平息了战火,制定了统一的标准 —--— 先捕获冒泡。 现代浏览器都遵循了此标准,所以当事件发生时,会经历3个阶段。...DOM 事件流会经历3个阶段捕获阶段 当前目标阶段 冒泡阶段 我们向水里面扔一块石头,首先它会有一个下降的过程,这个过程就可以理解为从最顶层向事件发生的最具体元素(目标点)的捕获过程...Js代码中只能执行捕获或者泡其中的一个阶段。 2. onclick和attachEvent 只能得到冒泡阶段。...4.实际开发中我们很少使用事件捕获我们更关注事件泡。...事件委托的原理 给父元素注册事件,利用事件冒泡,当元素的事件触发,会冒泡父元素,然后去控制相应的元素。 事件委托的作用 我们只操作了一次 DOM ,提高了程序的性能。

    1.5K41

    js高程之事件通识篇(一)

    场景:在很多时候我们会遇到类似的问题,我最早遇到的场景是在a标签上定义了连接地址,然后a标签内定义的标签定义的其他点击事件会在执行前就先页面跳转了。...e.preventDefault() }) 捕获 捕获冒泡的机制相反,是指元素会捕获所有元素的事件,进而检查自己是否具有事件绑定,从而触发。...:事件捕获阶段、目标阶段冒泡阶段。...在多数的浏览器里规定了事件不会在捕获阶段触发事件,只会在目标阶段触发,而后才会触发冒泡阶段。但有的浏览器在捕获阶段也会触发事件,于是导致了两次父元素的事件触发。...如果为true,代表捕获阶段处理,如果为false,代表冒泡阶段调用函数。

    49830

    webapi(五)- 事件对象

    :先捕获冒泡 捕获阶段是 从父 冒泡阶段是 从子父 事件冒泡 当一个元素的事件被触发时,同样的事件将会在该元素的所有祖先元素中依次被触发。...addEventListener第三个参数传入true代表是捕获阶段触发 若传入false代表冒泡阶段触发,默认就是false 若是用 L0 事件监听,则只有冒泡阶段,没有捕获 document.addEventListener...事件冒泡 阻止事件流动 语法 事件对象.stopPropagation() 此方法可以阻断事件流动传播,不光在冒泡阶段有效,捕获阶段也有效 let fa = document.querySelector...原理: 事件冒泡,点击元素时,冒泡冒到了父元素,所以给父元素注册的事件,元素也能触发。...) 后面注册的事件不会覆盖前面注册的事件(同一个事件) 可以通过第三个参数去确定是在冒泡或者捕获阶段执行 必须使用removeEventListener(事件类型, 事件处理函数, 获取捕获或者冒泡阶段

    1K20

    事件高级

     事件捕获: 网景最早提出,由 DOM 最顶层节点开始,然后逐级向下传播到到最具体的元素接收的过程。  DOM 事件流分为3个阶段:  1. 捕获阶段 2. 当前目标阶段 3....冒泡阶段   我们向水里面扔一块石头,首先它会有一个下降的过程,这个过程就可以理解为从最顶层向事件发生的最具体元素(目标点)的捕获过程;之后会产生泡泡,会在最低点( 最具体元素)之后漂浮水面上,这个过程相当于事件冒泡...JS 代码中只能执行捕获或者冒泡其中的一个阶段。   2. onclick 和 attachEvent 只能得到冒泡阶段。   ...实际开发中我们很少使用事件捕获我们更关注事件冒泡。   5. 有些事件是没有冒泡的,比如 onblur、onfocus、onmouseenter、onmouseleave   6....事件委托的原理 给父元素注册事件,利用事件冒泡,当元素的事件触发,会冒泡父元素,然后去控制相应的元素。 事件委托的作用 我们只操作了一次 DOM ,提高了程序的性能。

    1.2K10

    事件高级

    学完DOM事件流后,我们进一步学习 attacheEvent()事件监听(IE678支持) ?...最终,w3c 采用折中的方式,平息了战火,制定了统一的标准 —--— 先捕获冒泡。 现代浏览器都遵循了此标准,所以当事件发生时,会经历3个阶段。...DOM 事件流会经历3个阶段捕获阶段 当前目标阶段 冒泡阶段 我们向水里面扔一块石头,首先它会有一个下降的过程,这个过程就可以理解为从最顶层向事件发生的最具体元素(目标点)的捕获过程...;之后会产生泡泡,会在最低点( 最具体元素)之后漂浮水面上,这个过程相当于事件冒泡。...(给父元素注册事件,利用事件冒泡,当元素的事件触发,会冒泡父元素,然后去控制相应的元素。)

    1.4K20

    JavaScript捕获冒泡探讨

    W3C规范中定义了3个事件阶段,依次是捕获阶段、目标阶段冒泡阶段。事件对象按照上图的传播路径依次完成这些阶段。如果某个阶段不支持或事件对象的传播被终止,那么该阶段就会被跳过。...捕获 阶段:在事件对象到达事件目标之前,事件对象必须从window经过目标的祖先节点传播到事件目标。 这个阶段我们称之为捕获阶段。在这个阶段注册的事件监听器在事件到达其目标前必须先处理事件。...目标 阶段:事件对象到达其事件目标。 这个阶段我们称为目标阶段。一旦事件对象到达事件目标,该阶段的事件监听器就要对它进行处理。如果一个事件对象类型被标志为不能冒泡。...那么对应的事件对象在到达此阶段时就会终止传播。 冒泡 阶段: 事件对象以一个与捕获阶段相反的方向从事件目标传播经过其祖先节点传播到window。这个阶段被称之为冒泡阶段。...e.stopPropagation) { e.stopPropagation() } else { e.cancelBubble = true; } } } 可以看我之前写过的一篇文章:如何停止冒泡和阻止默认行为

    50220

    「Web编程API」- 03

    最终,w3c 采用折中的方式,平息了战火,制定了统一的标准 —--— 先捕获冒泡。 现代浏览器都遵循了此标准,所以当事件发生时,会经历3个阶段。...DOM 事件流会经历3个阶段捕获阶段 当前目标阶段 冒泡阶段 我们向水里面扔一块石头,首先它会有一个下降的过程,这个过程就可以理解为从最顶层向事件发生的最具体元素(目标点)的捕获过程;之后会产生泡泡...,会在最低点( 最具体元素)之后漂浮水面上,这个过程相当于事件冒泡。...(ie) 在冒泡阶段触发 // 冒泡阶段 如果addEventListener 第三个参数是 false 或者 省略 // son -> father ->body -...生活中的代理 js事件中的代理 事件委托的原理 给父元素注册事件,利用事件冒泡,当元素的事件触发,会冒泡父元素,然后去控制相应的元素。

    1.4K50

    前端day16-JS(WebApi)学习笔记(事件补充、事件冒泡捕获

    事件冒泡:如果一个元素的事件被触发,那么他的所有父级元素的同名事件也会被依次触发 元素->父元素->body->html->document->window 事件冒泡一直存在,只不过以前我们没有给父级元素加同名事件...1.事件冒泡:从触发事件元素,一级一级往上找父元素触发同名事件,如果有就触发 2.事件捕获:从最顶级的父元素一级一级往下找元素触发同名事件,直到触发事件的元素为止 事件捕获与事件冒泡触发事件的顺序完全相反....事件对象.stopPropagation() 除了可以阻止冒泡还可以阻止捕获 5.IE8及以前没有捕获!...这里就省略代码了 事件三个阶段 1.事件一共有三个阶段:事件的执行顺序 1--捕获阶段 : 2--目标阶段 : 3--冒泡阶段 : 2.事件对象.eventPhase 可以获得触发这个事件时,到底是哪个阶段...:如果想给父元素的多个子元素添加事件,我们可以只需要给父元素添加事件即可,然后 通过获取事件源(e.target)就可以得知是哪一个元素触发了这个事件 隔壁老王

    1.8K00

    JavaScript小技能:事件

    (Node.js 的事件模型、浏览器插件WebExtensions技术的事件模型) 1.3 事件冒泡捕获 当一个事件发生在具有父元素的元素上时,浏览器运行两个不同的阶段 - 捕获阶段冒泡阶段。...在现代浏览器中,默认情况下,所有事件处理程序都在冒泡阶段进行注册。 捕获阶段:浏览器检查元素的最外层祖先,是否在捕获阶段中注册了一个onclick事件处理程序,如果是,则运行它。...冒泡阶段:浏览器检查实际点击的元素是否在冒泡阶段中注册了一个onclick事件处理程序,如果是,则运行它。然后它移动到下一个直接的祖先元素,并做同样的事情,直到它到达元素。...事件委托: 如果你想要在大量子元素中单击任何一个都可以运行一段代码,您可以将事件监听器设置在其父节点上,并让节点上发生的事件冒泡父节点上,而不是每个子节点单独设置事件监听器。...通过标准事件对象的 stopPropagation()函数来修复事件冒泡问题 当在事件对象上调用该函数时,它只会让当前事件处理程序运行,但事件不会在冒泡链上进一步扩大,因此将不会有更多事件处理器被运行

    1.4K10

    前端成神之路-WebAPIs03

    最终,w3c 采用折中的方式,平息了战火,制定了统一的标准 —--— 先捕获冒泡。 现代浏览器都遵循了此标准,所以当事件发生时,会经历3个阶段。...DOM 事件流会经历3个阶段捕获阶段 当前目标阶段 冒泡阶段我们向水里面扔一块石头,首先它会有一个下降的过程,这个过程就可以理解为从最顶层向事件发生的最具体元素(目标点)的捕获过程...;之后会产生泡泡,会在最低点( 最具体元素)之后漂浮水面上,这个过程相当于事件冒泡。...onclick 和 attachEvent(ie) 在冒泡阶段触发 // 冒泡阶段 如果addEventListener 第三个参数是 false 或者 省略 //...事件委托的原理 ​ 给父元素注册事件,利用事件冒泡,当元素的事件触发,会冒泡父元素,然后去控制相应的元素。 事件委托的作用 我们只操作了一次 DOM ,提高了程序的性能。

    3K20

    JavaScript——DOM事件高级

    DOM事件流分为3个阶段捕获阶段 当前目标阶段 冒泡阶段 比如我们给一个div注册了点击事件: 事件冒泡:IE最早提出,事件开始时由最具体的元素接收,然后逐级向上传播到DOM最顶层节点的过程。...简单理解:我们向水里仍一块石头,首先它会有一个下降的过程,这个过程就可以理解为从最顶层向事件发生的最具体元素(目标点)的捕获过程,只会产生泡泡,会在最低点(最具体元素)只会漂浮水面上,这个过程相当于事件冒泡...注意: JS代码中只能执行捕获或者冒泡其中的一个阶段。 onclick和 attachEvent只能得到冒泡阶段。...如果 addEventListener 第三个参数是true,表示在事件捕获阶段调用事件处理程序;如果是false(默认是false),表示在事件冒泡阶段调用事件处理程序。...非标准 e.returnValue 该属性阻止默认事件(默认行为) 非标准 e.preventDefault() 该方法阻止默认事件(默认行为)标准 e.stopPropagation() 阻止冒泡

    1.8K10

    深入了解浏览器:DOM 事件流、事件委托和加载顺序

    它分为三个阶段捕获阶段:事件从文档的根节点向下传播至目标元素。 目标阶段:事件到达目标元素,触发事件处理函数。 冒泡阶段:事件从目标元素向上冒泡至根节点。...深入理解事件流有助于编写更高效和可维护的 JavaScript 代码。 2. 事件委托 事件委托是一种利用事件冒泡原理的技术,将事件处理程序绑定父元素而不是每个子元素上。...我们深入了解浏览器的渲染过程,包括渲染树、样式计算和分层绘制。这有助于优化性能并处理渲染相关的问题。 5....我们将剖析事件循环的工作原理,包括宏任务和微任务,以及如何编写高效的异步代码。 6. 浏览器同源策略 同源策略是浏览器的一项安全机制,用于防止跨域请求。...我们将详细解释同源策略的原理,以及如何在开发中处理跨域问题。 7. 跨域解决方案 虽然同源策略限制了跨域请求,但仍然有多种方法可以实现跨域通信。

    41930

    【兼容性】H5滚动穿透解决方案

    ; } PC 可以,但是对移动端无效 那么我们限制body不超过一屏,那么自然就不能滚动了?...具体如下 以前 addEventlisener 参数 是 target.addEventListener(type, listener[, useCapture]); 第三个参数是 控制监听器是 捕获阶段还是...冒泡阶段执行,默认值是 false(冒泡阶段执行) 现在变成了 target.addEventListener(type, listener[, options]); 第三个参数变成了对象,包含一个属性...: false} ); 但是这样就会把页面所有滚动都禁止 所以我们需要开放一个白名单,当滚动的元素在白名单之内,我们就放开限制 这个白名单的设置就是 给元素加上 can-scroll 类名,这样就可以放开滚动...").addEventListener("touchmove", (e) => { e.stopPropagation(); }); 虽然document 取消了默认事件,本来整个页面都不能滚了 但是元素

    5.9K20
    领券