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

JS事件,你真的懂吗(捕获,冒泡)?

说到js事件大家肯定都知道,那么今天讲一点大家不知道的(假设大家不知道?)。 所有的js事件都会分为两个阶段捕获和冒泡。...,一直捕获到最后触发事件的那个元素点才会停止,那么冒泡阶段反之,会从最内层触发的那个元素开始往外层的父级元素一直冒泡。...方法来判断触发的节点是不是当前我们点击的节点,就可以很巧妙的阻止事件的冒泡了。 应用场景举例 可能很多朋友感觉,这个东西我根本用不到啊,不会出现这种情况,我怎么会把父元素和子元素绑定相同的事件呢?...我们在使用中多数情况下只使用冒泡监听。例如一条购物车信息,在这条信息中,右下角有一个删除按钮。点击这条消息可查看详情,点击删除按钮可将此商品移除。...这时我们给button一个阻止事件传递的功能,点击删除按钮后,事件就会结束,就不再显示商品详情。 本文为作者原创,手码不易,允许转载,转载后请以链接形式说明文章出处。

2.5K20

:第三章 - 事件修饰符的使用

2、 事件修饰符   a).stop:阻止事件冒泡   在下面的示例中,我们分别创建了一个 button 的点击事件和外侧的 div 的点击事件,根据事件的冒泡机制我们可以得知,当我们点击了按钮之后,会扩散到父元素...在 Vue 中,当我们想要阻止元素的默认事件,只需要在绑定的事件后使用 prevent 修饰符即可,示例代码如下。...c).capture:添加事件监听器时使用事件捕获模式   在上面的学习中我们了解到,事件捕获模式与事件冒泡模式是一对相反的事件处理流程,当我们想要将页面元素的事件流改为事件捕获模式时,只需要在父级元素的事件上使用...d).self:只当在 event.target 是当前元素自身时触发处理函数(比如不是子元素冒泡引起的事件触发)   在上面的例子中,我们为 div 绑定了一个点击事件,而我们的本意可能是只有当我们点击...因此,用 v-on:click.prevent.self 会阻止所有的点击,而 v-on:click.self.prevent 只会阻止对元素自身的点击。

86530
  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

    从编程小白到全栈开发:响应用户的操作

    今天我想跟大家讨论一下如何在前端处理用户操作这个问题。...我们知道,当我们浏览一个网页或是手机app的时候,通常会跟它产生很多的交互动作,比如点击一个按钮、选择列表中的一行、滚动屏幕、使用键盘输入内容等等,而且伴随着这些操作,网页或app会有相应的变化反馈。...快去先写一下吧,抄一遍也行啊,赶紧的...)在那个简陋的计算器中,我们点击计算器界面上的“计算”按钮,程序就会为我们计算出结果。...好,那么问题来了: 为什么是点击了这个“计算”按钮,而不是页面上别的地方,才会执行运算并出结果呢? 因为...我们只给了这个按钮这样的能力啊!...那HTML的标签元素那么多,哪些上面可以用事件监听呢?答案是所有元素。只是有些事件是通用的,有些事件是某些特定元素上才有的,具体用到的时候,去网上查一下手册就行了。

    1.7K40

    探究活动Activity

    LinearLayout元素,这是一个布局,它现在是作为主布局的(也是父布局,它的里面还可以在嵌套其他的布局),现在我们在其中添加一个按钮,如下所示: 元素,里面有几个属性,我们来看一下,首先是android:id是给当前的元素定义一个唯一标识符(就是给这个按钮一个编号,意思跟9527差不多,之后就是通过这个编号来对这个按钮进行编写动作),...已经修改好了,平时我们使用APP时,都会有一些提示(Toast),接下来我们来看一下怎么用, 2.2 Toast的使用 介绍:Toast是Android系统提供的一种非常好的提醒方式,在程序中可以使用它将一些短小的信息通知给用户...button1.setOnClickListener(new View.OnClickListener() {//按钮的点击监听事件 @Override...,我把所有代码都写上,我们先实例化这个按钮,然后在这个按钮的setOnClickListener()方法为按钮注册一个监听器,点击按钮就会执行监听器中的方法onClick()方法,所以我们的Toast要放在这个

    1.4K20

    DOM事件的传播机制

    这个事件监听器类似于一个通知,当事件发生时,事件监听器会让我们知道,然后程序就可以做出相应的响应。...('click', function() { console.log('按钮被点击');});当我们点击按钮时,控制台会输出以下内容:外层元素被点击 内层元素被点击 按钮被点击可以看到,事件首先在捕获阶段从外层元素开始传播...', function() { console.log('按钮被点击');});当我们点击按钮时,控制台会输出以下内容:按钮被点击 内层元素被点击 外层元素被点击可以看到,事件首先在目标元素上触发,然后在冒泡阶段依次触发父级元素的相同类型事件处理程序...('click', function() { console.log('按钮被点击');});当我们点击按钮时,控制台会输出以下内容:外层元素被点击 内层元素被点击 按钮被点击可以看到,事件首先在捕获阶段依次触发父级元素的相同类型事件处理程序...'); console.log('触发事件的目标元素是:', event.target); }});当我们点击任意一个列表项时,控制台会输出以下内容:列表项被点击 触发事件的目标元素是: <li

    19830

    深入理解 DOM 事件机制

    借助事件代理,我们只需要给父容器ul绑定方法即可,这样不管点击的是哪一个后代元素,都会根据冒泡传播的传递机制,把容器的click行为触发,然后把对应的方法执行,根据事件源,我们可以知道点击的是谁,从而完成不同的事...例如表单一点击提交按钮(submit)跳转页面、a标签默认页面跳转或是锚点定位等。 很多时候我们使用a标签仅仅是想当做一个普通的按钮,点击实现一个功能,不想页面跳转,也不想锚点定位。...,不仅body绑定事件不会触发,与此同时按钮的另一个点击事件也不触发。...当我们点击最里层的元素d的时候,会依次输出: target:d¤tTarget:d target:d¤tTarget:c target:d¤tTarget:b target...:d¤tTarget:a 从输出中我们可以看到,event.target指向引起触发事件的元素,而event.currentTarget则是事件绑定的元素,只有被点击的那个目标元素的event.target

    2.8K50

    Chrome - JavaScript调试技巧总结(浏览器调试JS)

    2,使用技巧 (1)调试时当前调用在哪里,Call Stack 列表里的箭头便会指向哪里。同时当我们点击调用栈列表上的任意一处,便会调到相应的位置,方便我们再回头去看看代码。...因为我们有时候需要监听和查看某个元素的变化、赋值情况,但是并是不太关心哪一段代码对它做的修改,只想看看它的变化情况,那么可以给它来个监听事件。...2,使用说明 (1)我们右键点击需要监听的 DOM 节点,选择“Break On...”菜单项,在出现的三个选择项中任选一个便会添加断点。 ?...这些都会显示在 Source 页面里的 Breakpoints、DOM Breakpoints 区域中: Breakpoints:js 断点 DOM Breakpoints:DOM 元素断点 点击断点前面的复选框可以暂时...(3)Snippets 的方便之处在于,我们只需要打开 Chrome 就可以编写一份任意页面都可以运行的JS代码 2,使用样例 (1)点击“New Snippet”按钮,创建一个新的片段文件 ?

    25.1K43

    【Web前端】嵌套元素的“事件”冒泡?!

    这种机制使得一个事件可以被多个元素处理,而不需要为每一个元素单独设置事件监听器。 事件冒泡 让我们先看一个关于事件冒泡的基本示例,在按钮及其父元素上设置点击事件监听器。 HTML 代码 <!..."); }); 有一个包含按钮的 ​​div​​ 元素,为父元素(​​div​​)和子元素(按钮)设置点击事件监听器。...当用户点击按钮时,首先触发按钮的点击事件,然后事件冒泡到父元素 ​​div​​。 结果是用户将看到两个弹窗,依次表示“子元素被点击”和“父元素被点击”。 冒泡顺序 点击按钮,触发 按钮点击事件。...当我们为事件设置监听器时,可以指定事件捕获阶段。在捕获阶段,事件从文档的根元素开始,然后向下传播到最具体的元素。...无论用户点击哪个 ​​li​​,都会触发父元素的事件监听器。判断 ​​event.target.tagName​​ 确保只有 ​​li​​​ 元素的点击事件会被响应。

    7300

    【Vue.js】监听器功能(EventListener)的实际应用【合集】

    在实际开发过程中,我遇到了一个颇为棘手的小问题 为了让代码结构更为清晰,便于后续的维护与管理工作,我打算把 HTML 文件中 标签内的 JavaScript 代码迁移到外部的...解决方法阐述 为有效化解这一困境,我采用了在 JS 文件中监听 DOMContentLoaded 事件的策略。此事件是在浏览器完成解析 HTML 文档且所有 DOM 元素构建完毕后触发的关键信号。...多个监听器:一个元素可以添加多个相同类型或者不同类型的监听器。例如,可以同时为一个按钮添加点击监听器和鼠标移入监听器。...实际应用场景 用户交互响应:如上述按钮点击的例子,通过监听器可以响应用户操作,改变网页内容、提交表单或者执行其他复杂的逻辑。...动态元素更新:对于动态创建的元素,比如通过 JavaScript 生成新的按钮或其他 HTML 元素,也可以为这些新元素添加监听器,以保证它们具有交互功能。

    13410

    你会在浏览器中打断点吗?我会!

    我们可以对组执行以下操作: 通过点击其名称折叠或展开一个组。 通过点击组或断点旁边的复选框单独启用或禁用组或断点。 将鼠标悬停在其上,然后点击关闭按钮可以要删除一个组。...在Breakpoints面板中,选中一个组然后右键,然后选择: 启用文件中的所有断点 禁用文件中的所有断点 删除文件中的所有断点(本组内) 删除其他断点(在其他组中) 删除所有断点(在所有文件中) 编辑断点...当我们禁用断点时,Sources 面板会使其在行号旁边的标记「变为透明」。 将鼠标悬停在断点上,然后点击编辑以编辑,点击关闭以删除它。 在编辑断点时,可以在内联编辑器的下拉列表中更改其类型。...右键点击断点以查看其上下文菜单,并选择以下选项之一: 编辑条件或日志点。 显示位置。 删除断点。 删除其他断点(在其他文件中)。 删除所有断点(在所有文件中)。 3....当我们想要在更改 DOM 节点或其子节点的代码上暂停时,可以使用 「DOM 变更断点」。 设置 DOM 变更断点的步骤: 点击Elements选项卡。 找到我们想要设置断点的元素。 右键点击元素。

    57810

    Rxjs 响应式编程-第一章:响应式

    假设我们在电子表格的单元格A1中有一个值,然后我们可以在电子表格中的其他单元格中引用它,并且每当我们更改A1时,每个依赖于A1的单元格都会自动更新与A1同步。 ?...在点子表格中,我们只需要简单的声明我们需要处理的问题,不用操心计算机如何处理。 鼠标输入作为streams 理解如何把事件作为流,我们回想一下本章开头的那个程序。...在响应式编程中,我把鼠标点击事件作为一个我们可以查询和操作的持续的流事件。想象成流而不是一个孤立的事件,这种想法开辟了一种全新的思考方式。我们可以在其中操纵尚未创建的整个值的流。 好好想想。...第一次接触Observers Observers监听Observables。每当Observable中触发一个事件,它都会在所有Observers中调用相关的方法。...当我们必须创建一个非常具体的Observable时,create是一个很好的选择,但是RxJS提供了许多其他Operator,可以很容易地为常用源创建Observable。 让我们再看看前面的例子。

    2.2K40

    Chrome开发,debug的使用方法。

    打开的开发者工具就长下面的样子: 不过我一般习惯与点左下角的那个按钮,将开发者工具弹出作为一个独立的窗口: 下面来分别说下每个Tab的作用。...Elements标签页 这个就是查看、编辑页面上的元素,包括HTML和CSS: 左侧就是对页面HTML结构的查看与编辑,你可以直接在某个元素上双击修改元素的属性,或者你点右键选"Edit as Html..."直接对元素的HTML进行编辑,或者删除某个元素,所有的修改都会即时在页面上得到呈现。...你点一下就知道了哦,嘿嘿) 你还可以对某个元素进行监听,在JS对元素的属性或者HTML进行修改的时候,直接触发断点,跳转到对改元素进行修改的JS代码处: Elements标签页的右侧可以对元素的CSS进行查看与编辑修改...点击左侧某一个具体去请求URL,可以看到该请求的详细HTTP请求情况: 我们可以在这里看到HTTP请求头、HTTP响应头、HTTP返回的内容等信息,对于开发、调试,都是很有用的。

    1.4K100

    8 个 DOM 功能

    如果将 once 值改为 false,则多次单击该按钮,每次单击按钮时都会附加文本。...可以通过修改代码中的数字更改值。 至于浏览器支持,似乎在兼容性上有些小问题,不过看上去现在几乎所有还在使用中的浏览器都支持可选参数功能,包括 IE10。...defaultChecked 查询时,这两个复选框都会返回 true。...但是,如果由于某种原因我想使文本节点分开,但我仍然希望能够将文本作为一个单元抓取,那么 wholeText 就是有用的。因此我可以在相邻的文本节点上执行此操作,而不是调用 normalize()。...; 4 } 5}, false); 如果所有浏览器都计算过三次点击次数,那么你还可以检测到更高的点击次数,但我认为在大多数情况下,三次点击事件就足够了。

    1.8K20

    JavaScript面试问题:事件委托和this

    用document元素来处理按钮的点击行为就是事件委托的一个例子,另一种常见情况是,用ul元素来处理其子元素li的事件。 有多种方法来处理事件委托。标准方法来源于原生浏览器的功能。...事件捕获和事件冒泡是事件流中的两个阶段,任何事件产生时,如点击一个按钮,将从最顶端的容器开始(一般是html的根节点)。...点击按钮会导致事件流识别本身在容器下面的文本,每一个元素都接收同样的点击监听代码,由于事件捕获,点击事件会首先触发HTML节点绑定的点击处理程序,然后在事件冒泡阶段的末尾返回到最顶层元素。...使用事件委托能减少监听器数量,在元素的容器上绑定事件意味着只需要一个监听器。这种方法的缺点是,父容器的侦听器可能需要检查事件来选择正确的操作,而元素本身不会是一个监听器。...浏览器不会清理页面,因此在单页应用中,所有从内存中清理不当的碎片都会留在内存中,这些碎片会降低程序性能。 当在页面中添加交互时,仔细考虑一下,是否真的需要去监听元素。

    1.3K50

    Web前端学习 第3章 JavaScript基础教程16 事件流

    一、绑定事件 想要给一个元素绑定事件,我们有两种方法:使用内联事件或事件监听器。...在之前的课程中,我们一直使用的是内联事件来为元素绑定事件,例如一个按钮的点击事件,代码如下 btn.onclick = function(){} //绑定鼠标单击事件 我们还可以用使用事件监听器为元素绑定事件...二、事件冒泡与事件捕获 接下来我们用事件监听器为三个div元素绑定点击事件,最外层的div宽高是300px,中间的div宽高都是200px,最内层的div宽高都是100px,那么思考一下,点击最内层的div...导致这种顺序的原因是因为:事件流有事件捕获阶段和事件冒泡阶段,事件捕获阶段是从最外层元素开始一层一层进入到事件目标(也就是我们点击的那个元素),到达事件目标后,进入事件冒泡阶段,事件从最内层流向最外层,...四、课后练习 一、实现如下功能(阻止事件冒泡) 点击一个按钮,显示一个容器的盒子; 点击容器,容器背景颜色改变; 点击容器按钮 容器关闭; 二、实现水果列表,让后添加的元素也可以删除(事件委托); 三、

    74340

    Vue这些修饰符帮我节省20%的开发时间

    ,例如,当点击提交按钮时阻止对表单的提交。...用 v-on:click.prevent.self 会阻止所有的点击,而 v-on:click.self.prevent 只会阻止对元素自身的点击。...像下面所示,刚刚我们从.stop时候知道子元素会冒泡到父元素导致触发父元素的点击事件,当我们加了这个.self以后,我们点击button不会触发父元素的点击事件shout,只有当点击到父元素的时候(蓝色背景....exact (2.5新增) 我们上面说了这个系统修饰键,当我们像这样绑定了click键按下的事件,惊奇的是,我们同时按下几个系统修饰键,比如ctrl shift点击,也能触发,可能有些场景我们只需要或者只能按一个系统修饰键来触发...在标签里定义的所有属性包括 HTML 属性和自定义属性都会在 attributes 对象里以键值对的方式存在。

    1.1K00

    一个排名调整问题恶心了我整整一天

    Hello,大家好,我是麦洛,最近在项目中遇到一个排名调整问题,一番折腾,算是搞定了,分享出来我的方法和大家交流,希望找到更优解 ? 问题回顾 问题分析 ?场景一 ?场景二 解决方案 ?...在招投标行业,某个项目的某个标段会有多家投标人来投标.为了选出中标企业,会组织专家对投标人进行评审,在最后阶段,如果有特殊原因允许对投标人排名进行临时调整 如上图所示,我们可以点击排名按钮,在弹框中选择期望的排名...♀️以我浅薄的知识,感觉这个问题很棘手 刚开始我想我需要先把原来的排名查询出来,然后分上面两种情况去判断,进而获取各个元素的新排名,在建立旧排名和新排名的关联,然后通过这个关联关系达到更新数据库的目的...,其实最麻烦的地方就是一个企业排名变化以后,其他的都要跟着变化,通过利用链表,我们只需要关注他的新排名,对应其他元素的升降已经由链表帮我们处理好,我们只需要重新遍历,就可以获取到新的排名 今天的分享就到这里...,我是麦洛,那个连HashMap源码都没看完的家伙,如果大家更好的方法,记得给我留言 ?

    27830

    JavaScript—事件

    当我们的鼠标点击到窗口上的按钮时,并不是鼠标的箭头真正点击到这个按钮了,而是鼠标发出了一个动作事件,然后这个事件先被传送到了操作系统的命令处理带,然后再传送到负责显示图形的图像数据层,事件到这里后图像数据层会先看哪个程序的窗口在最上面...事件委托: 这其中有一个事件委托的概念,我们需要在代码中把事件委托也可以说是注册到按钮上,这时会有一个监听器监听着这个按钮,当用户点击按钮时就会去调用委托事件中的代码,这些代码都写在函数中。...所以简单来说,就是把一个写好的函数通过事件委托到按钮上,当用户点击按钮后,就会调用那个函数,函数里的代码就会执行。...例如:我把一段打印Hello World的函数,通过事件委托到按钮上,当我点击这个按钮的时候就会调用这个函数,函数执行完之后就会打印Hello World。...同一个元素对象的同一个事件,可以添加多个函数,这些函数可以执行不同的内容,例如我在一个button元素的mouseover事件中分别添加了三个函数,这三个函数各自打印了一句话,那么当我鼠标碰到按钮时,就会打印出三句话

    1.6K20

    Google Chrome 浏览器 开发者工具 使用教程

    而本文,就是要详细说说Chrome的开发者工具,说说我为什么认为它比Firebug要好用。 怎样打开Chrome的开发者工具? 你可以直接在页面上点击右键,然后选择审查元素: ? ?...打开的开发者工具就长下面的样子: ? ? 不过我一般习惯与点左下角的那个按钮,将开发者工具弹出作为一个独立的窗口: ? ? 下面来分别说下每个Tab的作用。...左侧就是对页面HTML结构的查看与编辑,你可以直接在某个元素上双击修改元素的属性,或者你点右键选"Edit as Html"直接对元素的HTML进行编辑,或者删除某个元素,所有的修改都会即时在页面上得到呈现...你点一下就知道了哦,嘿嘿) 你还可以对某个元素进行监听,在JS对元素的属性或者HTML进行修改的时候,直接触发断点,跳转到对改元素进行修改的JS代码处: ? ?...点击run按钮,就可以开始分析页面,分析完了就可以看到分析结果了: ? ? 它甚至可以分析出页面上样式表中有哪些CSS是没有被使用的哦: ? ?

    4.9K60
    领券