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

JS事件流、事件冒泡、阻止冒泡、事件捕获(一看就懂)

总结来说就是: 当一个元素接收到事件的时候 会把他接收到的事件传给自己的父级,一直到window。 如果它的父级元素也有某个事件函数,当执行完它的事件函数后,也就会执行它父级的事件函数。...提示: 可以使用 document.removeEventListener() 方法来移除 addEventListener() 方法添加的 事件句柄。...提示:使用 element.addEventListener() 方法为指定元素添加事件句柄。...描述了事件触发后执行的函数。 当事件触发时,事件对象会作为第一个参数传入函数。事件对象的类型取决于特定的事件。例如, “click” 事件属于 MouseEvent(鼠标事件) 对象。...布尔值,指定事件是否在捕获或冒泡阶段执行。 可能值: true - 事件句柄在捕获阶段执行 false - 默认。

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

    webapi(二)- 事件

    addEventListener('事件' , 要执行的函数) 事件监听三要素 事件源:哪个dom元素被事件触发了 事件:用什么方式触发 事件调用的函数 :要做什么事 例如: // 给元素注册上事件...函数是点击之后再去执行,每次点击都会执行一次 事件监听版本 DOM L0: 事件源.on事件 = function(){} 例如: // 绑定事件DOM L0 // 缺点:会出现覆盖现象...(回头再调用的函数) 如果将函数A作为参数传递给函数B时,我们称A为回调函数 即:当一个函数当作参数来传递给另外一个函数的时候,这个函数就是回调函数 // 回调函数:把一个函数当成参数传递给另外一个函数...('button') btn.addEventListener('click', function () { // 点击时改变按钮颜色 /...,this 指向事件源(即被触发的事件 btn) console.log(this) }) 排他思想 干掉所有人,复活我自己 事件发生时,只有我自己生效,其他所有都不生效

    72620

    JavaScript的事件

    目前也都支持事件捕获,但是由于老版本的浏览器不支持事件捕获,因此很少有人使用事件捕获。...alert("is clicked"); } 点击按钮会调用showMsg()函数,事件处理程序的代码在执行时,有权访问全局作用域的任何代码。...var btn = document.getElementById("btn"); btn.onclick = function(){ alert('cliked'); } dom0级方法制定的事件处理程序被认为是元素的方法...IE中的事件对象 在使用DOM0级方法添加事件时,event对象可以作为window对象的一个属性存在,使用attachEvent添加事件处理程序的时候,event对象会作为参数传入事件处理函数中 dom.onclick...>)中的一个或多个字符时 resize 当浏览器窗口被调整到一个新的高度或者宽度时,会触发 scroll 当用户滚动带滚动条的元素中的内容时,在该元素上触发resize,scroll会在变化期间重复被激发

    1.5K30

    前端学习(51)~事件的传播和事件冒泡

    在这个过程中,默认情况下,事件相应的监听函数是不会被触发的。 事件目标:当到达目标元素之后,执行目标元素该事件相应的处理函数。如果没有绑定监听函数,那就不执行。...); }, true); 上面的方法中,参数为true,代表事件在捕获阶段执行。...); 说明: (1)第一个接收到事件的对象是 window(有人会说body,有人会说html,这都是错误的)。...事件冒泡 事件冒泡: 当一个元素上的事件被触发的时候(比如说鼠标点击了一个按钮),同样的事件将会在那个元素的所有祖先元素中被触发。...说明 onclick 事件是可以冒泡的 } 阻止冒泡 大部分情况下,冒泡都是有益的。当然,如果你想阻止冒泡,也是可以的。可以按下面的方法阻止冒泡。

    98720

    【前端 · 面试 】JavaScript 之你不一定会的基础题(二)

    对于这个答案中的第二次输出结果,有人生出了疑惑:为什么 parent 事件触发时,e.target.id 的结果为 child呢?不应该是 parent 吗?...] 事件捕获和事件冒泡 当一个事件发生在具有父元素的元素上(例如,在我们的例子中是 child 元素)时,现代浏览器运行两个不同的阶段 - 捕获阶段和冒泡阶段。...在冒泡阶段,恰恰相反: 浏览器检查实际点击的元素是否在冒泡阶段中注册了一个onclick事件处理程序,如果是,则运行它 然后它移动到下一个直接的祖先元素,并做同样的事情,然后是下一个,等等,直到它到达<...阻止冒泡 假如有以下代码: parent.onclick = function1; child.onclick = function2; 当我们点击 child 时,由于事件默认会在冒泡阶段注册...问题2:如果点击 parent 元素,输出是什么? 可以看到,现在 parent 的点击事件是冒泡阶段执行,child 的点击事件是在 捕获阶段执行。

    55510

    前端基础-事件

    什么是事件 一种 触发—响应 的机制; 用户的行为 + 浏览器感知(捕获)到用户的行为 + 事件处理程序 事件三要素: 事件源:(被)触发事件的元素 事件类型:事件的触发方式(例如鼠标点击或键盘点击...> 获取节点对象,然后 修改 节点对象 的 属性 onclick 的值,值是一个 匿名函数 即可; 以上两种事件绑定方式,需要在事件名称前加 on ; 事件监听(节点对象方法) ...但是处理函数中的 this 指向的选中的对象; 第三种:addEventListener方法可以针对同一个元素的同一个事件,添加多个监听处理函数。...当点击div1时,触发 事件1,但是,紧跟着,事件2和事件3也被触发了; 这种现象,我们称为 事件冒泡 在JS中当一个事件发生以后,它会在不同的DOM节点之间传播。...;i++){ //为每个图片元素注册点击事件,添加事件处理函数 imgObjs[i].onclick=function () { alert("啊,我被点击了");

    1.3K10

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

    // useCapture :是否使用捕捉,一般用 false,事件触发时,会将一个 Event 对象传递给事件处理程序。...取消事件:可取消的事件对象可以与一个或多个“默认动作”相关联。要取消事件,请调用该preventDefault()方法。 一个图片 ?...() { console.log('s2 冒泡方式') },false) 点击li时,打印 依次为 ul clicked li clicked   点击s1时,打印依次为 s1 捕获方式...= true; //否则,我们需要使用IE的方式来取消事件冒泡 } } 当需要阻止默认事件时 function stopDefault( e ) { if ( e && e.preventDefault...} return false; } 最后的解决方法: 让我们回顾一下最初的问题,可能部分浏览器把事件的useCapture默认为true,导致点击子元素时父元素的事件先响应了,于是我的办法是在父元素的事件里进行判断

    1.5K50

    深入理解 DOM 事件机制

    : 回调函数,当事件触发时,函数会被注入一个参数为当前的事件对象 event useCapture: 默认是 false,代表事件句柄在冒泡阶段执行 // 例2 var btn = document.getElementById...UI事件,当用户与页面上的元素交互时触发,如:load、scroll 焦点事件,当元素获得或失去焦点时触发,如:blur、focus 鼠标事件,当用户通过鼠标在页面执行操作时触发如:dblclick、mouseup...滚轮事件,当使用鼠标滚轮或类似设备时触发,如:mousewheel 文本事件,当在文档中输入文本时触发,如:textInput 键盘事件,当用户通过键盘在页面上执行操作时触发,如:keydown、keypress...合成事件,当为IME(输入法编辑器)输入字符时触发,如:compositionstart 变动事件,当底层DOM结构发生变化时触发,如:DOMsubtreeModified 同时 DOM3 级事件也允许使用者自定义一些事件...借助事件代理,我们只需要给父容器ul绑定方法即可,这样不管点击的是哪一个后代元素,都会根据冒泡传播的传递机制,把容器的click行为触发,然后把对应的方法执行,根据事件源,我们可以知道点击的是谁,从而完成不同的事

    2.8K50

    事件

    事件是某个行为或者触发,比如点击、鼠标移动..... 当用户点击鼠标时 当网页已加载时 当图像已加载时 当鼠标移动到元素上时 当用户触发按键时......("click",fn) //点击btn事件,执行函数fn cancel.addEventListener("click",function(){ btn.removeEventListener...("click",fn) }) //点击cancel事件,执行删除btn的绑定事件 通过removeEventListener()函数来移除事件处理程序时,移除时的参数必须与添加处理程序时使用的参数相同...(添加的方法少的时候大多是按添加顺序的反顺序执行的,但是添加的多了就无规律了),所以添加多个的时候,不依赖执行顺序的还好,若是依赖于函数执行顺序,最好自己处理,不要指望浏览器。...>这里是元素前添加一个新元素,内容为用户输入的非空字符串;当点击结尾添加时在最后一个 li 元素后添加用户输入的非空字符串;(2)当点击每一个元素li时控制台展示该元素的文本内容。

    1.4K30

    JavaScript事件机制实现的一些理解

    事件机制的组成 通过上面的实例,我们可以抽象出一个事件机制有三个组成部分: 1.事件源:即事件的发送者;(比如上例中的门铃) 2.事件:事件源发出的一种信息或状态;(比如上例中的门被敲响,代表有人拜访)...那么当td的click事件发生时,会先走红色的「capture phase」: Document (实际被点击的元素) 由上而下依序触发它们的...事件监听 EventTarget.addEventListener() addEventListener()基本上有三个参数,分别是「事件名称」、「事件的处理程序」(事件触发时执行的function),...使用这种方式来注册事件的好处是:同一个元素的同种事件可以绑定多个函数,按照绑定顺序执行。...出现: "卡卡罗特" "贝吉塔" 事件代理 在实际的开发当中,利用事件流的特性,我们可以使用一种叫做事件代理的方法。

    55730

    事件

    有传统方式和方法监听方式 传统方式 利用 on 开头的事件,如 onclick, 同一个元素同一个事件只能设置一个处理函数,出现多个处理函数的话,后面的会覆盖前面的。...() { console.log(1); }); //结果:1, 1 此处是个人见解: 当两个监听函数一样时,由上可发现会输出两次 1,这个其实是因为上面两个匿名函数看似一样...= () => alert(3); document.onclick = () => alert(4); //点击按钮后,弹出顺序1、2、3、4 addEventListener(type...不需要传递实参 注册事件时,event 对象会被系统自动创建,并依次传递给事件监听器(事件处理函数)。...("click", (e) => { alert(1); e.stopPropagation(); //只要在事件处理函数里使用就会执行完这个函数,才阻止冒泡。

    1.3K20

    【React】786- 探索 React 合成事件

    当子节点被点击时,click 事件向上冒泡,父节点捕获到事件后,我们判断是否为所需的节点,然后进行处理。其优点在于减少内存消耗和动态绑定事件。...这时,如果我们需要在事件处理函数运行之后获取事件对象的属性,可以使用 React 提供的 e.persist() 方法,保留所有属性: // 只修改 handleChange 方法,其他不变 function...也就是说,在 React 合成事件中,需要阻止冒泡时,可以使用 e.stopPropagation() 或 e.preventDefault() 方法来解决,另外还可以使用 e.nativeEvent.stopImmediatePropagation...在 React 中,一个组件只能绑定一个同类型的事件监听器,当重复定义时,后面的监听器会覆盖之前的。...举一个实际案例:实现点击空白处关闭菜单的功能:当菜单打开时,在 document 上动态注册事件,用来关闭菜单。 点击菜单内部,由于不冒泡,会正常执行菜单点击。

    1.8K40

    探索 React 合成事件

    当子节点被点击时,click 事件向上冒泡,父节点捕获到事件后,我们判断是否为所需的节点,然后进行处理。其优点在于减少内存消耗和动态绑定事件。...函数 阻止默认行为方式 事件返回 false 使用 e.preventDefault() 方法 [Native-Event-VS-Synthetic-Event.png] 三、React 事件与原生事件执行顺序...也就是说,在 React 合成事件中,需要阻止冒泡时,可以使用 e.stopPropagation() 或 e.preventDefault() 方法来解决,另外还可以使用 e.nativeEvent.stopImmediatePropagation...在 React 中,一个组件只能绑定一个同类型的事件监听器,当重复定义时,后面的监听器会覆盖之前的。...举一个实际案例:实现点击空白处关闭菜单的功能: 当菜单打开时,在 document 上动态注册事件,用来关闭菜单。 点击菜单内部,由于不冒泡,会正常执行菜单点击。

    4.1K22

    webapi(五)- 事件对象

    两个阶段:先捕获在冒泡 捕获阶段是 从父到子 冒泡阶段是 从子到父 事件冒泡 当一个元素的事件被触发时,同样的事件将会在该元素的所有祖先元素中依次被触发。...,后面注册的事件会覆盖前面注册(同一个事件) 直接使用null覆盖就可以实现事件的解绑 都是冒泡阶段执行的 // 需求:按钮的点击事件只能触发一次 // 解绑事件 // 解绑语法: 元素.onclick...btn.onclick = null } 事件监听注册(L2) 语法: addEventListener(事件类型, 事件处理函数, 是否使用捕获) 后面注册的事件不会覆盖前面注册的事件(同一个事件...) 可以通过第三个参数去确定是在冒泡或者捕获阶段执行 必须使用removeEventListener(事件类型, 事件处理函数, 获取捕获或者冒泡阶段) 匿名函数无法被解绑 // addEventListener...} btn.addEventListener('click' , fn) 滚动事件 当页面进行滚动时触发的事件 事件名: scroll 给 window 或 document 添加 scroll

    1K20

    事件高级

    方法监听注册方式  w3c 标准 推荐方式  addEventListener() 它是一个方法  IE9 之前的 IE 不支持此方法,可使用 attachEvent() 代替  特点...(type, listener[, useCapture]) eventTarget.addEventListener()方法将指定的监听器注册到 eventTarget(目标对象)上,当该对 象触发指定的事件时...eventTarget(目标对象) 上,当该对象触 发指定的事件时,指定的回调函数就会被执行。...该方法接收两个参数:  eventNameWithOn:事件类型字符串,比如 onclick 、onmouseover ,这里要带 on  callback: 事件处理函数,当目标触发事件时回调函数被调用...事件对象的使用 事件触发发生时就会产生事件对象,并且系统会以实参的形式传给事件处理函数。 所以,在事件处理函数中声明1个形参用来接收事件对象。

    1.2K10

    【Web前端】系统中正在发生的“事件”

    当这些事件出现时,系统会发出信号,并提供一种机制,允许你自动执行某些操作(比如运行代码)。这些事件通常是在浏览器窗口内触发的,关联到其中的特定元素。...这通常是你作为程序员编写的 JavaScript 函数,它会在事件发生时被执行。当你定义了一个代码块来响应该事件时,我们称之为注册事件处理器。...; }; ​​onclick​​事件处理器在用户单击按钮时被触发,随后通过 ​​alert()​​​ 函数显示一条消息。...添加事件监听器 使用 ​​addEventListener()​​方法来添加事件监听器,可以接受三个参数: 事件类型(字符串,例如 ​​'click'​​)。 事件处理函数。...这种方法虽然有效,但并不推荐使用,它会使代码的结构较为混乱。 onclick="alert('按钮被点击了!')">点击我!

    7510
    领券