事件的执行顺序 JavaScript冒泡和捕获考察题目看图回答问题,晚上公布答案。 问:点击Li,JS的执行顺序是什么? ?...答:去掉event.stopPropagation() 之后,由于事件有捕获和冒泡时先执行捕获,捕获到div之后,事件被阻止,后面就不在继续传播了。所以只输出divcallback....在上面的代码如果增加一个div.addEventListener('click',callbackdiv2,false); 则div先执行捕获,接着执行上面这句冒泡,所以微博里的一个朋友评论说事件执行过捕获就不会执行冒泡其实是不对的...捕获 阶段:在事件对象到达事件目标之前,事件对象必须从window经过目标的祖先节点传播到事件目标。 这个阶段被我们称之为捕获阶段。在这个阶段注册的事件监听器在事件到达其目标前必须先处理事件。...= true; } } } 可以看我之前写过的一篇文章:如何停止冒泡和阻止默认行为
冒泡型事件(Bubbling):从DOM树型结构上理解,就是事件由子节点沿父节点一直向上传递直到根节点;从浏览器界面视图HTML 元素排列层次上理解就是,事件由具有从属关系的最确定的目标元素一直传递到最不确定的目标元素...', observer); // 移除事件监听器 DOM标准: // 第一个参数是事件名称,第二个参数 observer 是回调处理函数,第三个参数注明该回调处理函数是在事件传递过程中的捕获阶段被调用还是冒泡阶段被调用...,默认true为捕获阶段 element.addEventListener('click', observer, useCapture); // 注册事件监听器(既支持注册冒泡型事件,又支持捕获型事件。...returnValue为false即可 取消浏览器的事件传递 取消事件传递是指,停止捕获型事件或冒泡型事件的进一步传递。...()即可 function someHandle(event) { event.stopPropagation(); } 因此,跨浏览器的停止事件传递的方法是: function someHandle
级事件规定事件流包括三个阶段,事件捕获阶段,处于目标阶段,事件冒泡阶段,首先发生的是事件捕获,为截取事件提供机会,然后是实际目标接收事件,最后是冒泡阶段 ?...//删除事件 /*参数分别是,事件处理属性名称,处理函数,是否在捕获时执行事件处理函数, 默认是false,即在冒泡阶段执行 */ 应用举例 var btn = document.getElementById...image.png DOM2级事件传播:有3个阶段: 捕获阶段:事件从document向子元素一层层传递,直到目标元素 处于目标阶段:此时事件发生在目标元素上,被看做冒泡的一部分 冒泡阶段:和IE冒泡一样...,从目标元素向父级元素传递,直到document停止。...: e.stopPropagation(); event.stopPropagation(): 阻止捕获和冒泡阶段中当前事件的进一步传播。
事件流描述的是从页面中接收事件的顺序。IE的事件流失事件冒泡,而Netspace的事件流失事件捕获。...div、body、html的顺序执行。...如果以前面的例子,则事件发生的顺序为document、html、body和div。 DOM事件流 事件流包含三个阶段:事件捕获阶段、处于目标阶段和事件冒泡阶段。...首先发生的是事件捕获,为事件的截获提供了机会。然后是实际目标接收到事件。最后一个是事件冒泡阶段,可以在这这个阶段对事件作出响应。 ? ...在dom事件流中,具体元素div在捕获阶段不会获取到事件,这意味着事件从document到html,到body就停止了。
这一个过程也称为事件冒泡 事件捕获 与事件冒泡刚好相反,事件从最外层的 documet 开始一直往里面,直到点击的元素才停止 <...这一个过程也称为事件捕获 DOM 事件流 在上述两种事件确定的方式下,规定了事件处理的三个阶段。事件捕获阶段、处于目标阶段、事件冒泡阶段。...同时 DOM明确规定 事件捕获阶段不会处理事件 处于目标阶段属于冒泡阶段的一部分,并且会触发事件。...参数 3 为一个布尔值,false 代表在冒泡阶段执行,true 表示在捕获阶段执行 如下使用匿名函数定义的执行函数无法删除 var doc = document.querySelector(...否则通过html元素直接绑定的方式this指向了 window 对象 eventPhase 和 stopPropagation eventPhase 可以知道事件执行时处于哪个阶段 stopPropagation
一个DOM事件分为三个阶段:捕获阶段、触发阶段、冒泡阶段。...[image.jpg] 事件捕获阶段为事件的触发奠定了基础,当DOM事件发生的时候,首先由最不具体的window结点向下捕获那个具象元素(触发事件的元素),事件捕获之后就开始执行绑定在上面的函数;当函数执行完毕...,触发事件冒泡进入冒泡阶段,一直从触发的元素逐级想上传递,直至window元素。...handler, useCapture) 移除方式 removeEventListener(eventType, handler, useCapture) 最后一个参数是一个boolean类型的参数,表示是否捕获过程...:function(e){ //停止冒泡 var evt=EventUtil.getEvent(e); if(evt.stopPropagation) {evt.stopPropagation
事件看起来好像元素2的任何祖先元素都有对应于捕获阶段的onclick事件句柄。 元素1上绑定的doSomething2()事件被执行。 事件传递到目标,没有发现任何一个对应捕获阶段的事件句柄。...事件移向冒泡阶段并执行在冒泡阶段为元素2注册的doSomething()。 事件又一次向上传递并检查目标的任何祖先元素是否有对应冒泡阶段的事件句柄。最后没有发现任何句柄,因此什么也没发生。...事件会查看元素2的任何祖先元素是否存在对于捕获阶段的onclick事件句柄,但没有发现。 事件传递到目标。事件移动到自己的冒泡阶段并执行为元素2注册的对应冒泡阶段的doSomething()。...事件再次向上移动并检查目标的任何祖先元素是否有对应冒泡阶段的事件句柄。 事件在元素1上发现了事件句柄。于是doSomething2()被执行。...window.event.cancelBubble = true W3C模型中你必须调用stopPropagation()方法。 e.stopPropagation() 这会阻止冒泡阶段事件的传递。
// useCapture :是否使用捕捉,一般用 false,事件触发时,会将一个 Event 对象传递给事件处理程序。...几个概念 捕获阶段:事件对象通过目标的祖先从传播窗口到目标的父。...这个阶段也被称为捕获阶段。 目标阶段:本次活动对象到达事件对象的事件的目标。这个阶段也被称为目标阶段。如果事件类型指示事件不起泡,则在完成此阶段后,事件对象将停止。...冒泡阶段:事件对象通过目标的祖先中传播以相反的顺序,开始与目标的父和与所述结束窗口。这个阶段也被称为冒泡阶段。...当需要停止冒泡行为时 function stopBubble(e) { //如果提供了事件对象,则这是一个非IE浏览器 if ( e && e.stopPropagation ){
一个完整的JS事件流是从window开始,最后回到window的一个过程。 事件流被分为三个阶段(1~ 5)捕获过程、(5~ 6)事件触发过程、(6~ 10)冒泡过程。...如果它的父级元素也有某个事件函数,当执行完它的事件函数后,也就会执行它父级的事件函数。...布尔值,指定事件是否在捕获或冒泡阶段执行。 可能值: true - 事件句柄在捕获阶段执行 false - 默认。...事件句柄在冒泡阶段执行 从上面的表格中,可以看到参数值useCapture,为true的时候,事件在捕获过程中就会执行。...div1.addEventListener("click",function () { alert("你点击了div1") },true); //false 在捕获阶段执行
DOM事件流 事件传播的三个阶段是:事件捕获、事件冒泡和目标。 事件捕获阶段:事件从祖先元素往子元素查找(DOM树结构),直到捕获到事件目标 target。...在这个过程中,默认情况下,事件相应的监听函数是不会被触发的。 事件目标:当到达目标元素之后,执行目标元素该事件相应的处理函数。如果没有绑定监听函数,那就不执行。...); }, true); 上面的方法中,参数为true,代表事件在捕获阶段执行。...代码演示: //参数为true,代表事件在「捕获」阶段触发;参数为false或者不写参数,代表事件在「冒泡」阶段触发 box3.addEventListener("click", function...意思是,事件不会往父元素那里传递。 我们检查一个元素是否会冒泡,可以通过事件的以下参数: event.bubbles 如果返回值为true,说明该事件会冒泡;反之则相反。
寻找触发事件的DOM节点,找到其对应的FiberNode(即虚拟DOM节点) 收集从当前FiberNode到根FiberNode之间所有注册的「该事件对应回调」 反向遍历并执行一遍所有收集的回调(模拟捕获阶段的实现...收集路径中的事件回调函数 实现的思路是:从当前FiberNode一直向上遍历,直到根FiberNode。...要模拟捕获阶段的实现,需要从后向前遍历数组并执行回调。..._stopPropagation) { // 如果执行了se.stopPropagation(),取消接下来的遍历 break; } } }; 注意,我们在SyntheticEvent...冒泡阶段的实现 有了捕获阶段的实现经验,冒泡阶段很容易实现,只需将paths反向后再遍历一遍就行。
事件捕捉与冒泡 事件绑定机制 阻止冒泡 参考文献 事件捕捉与冒泡 先捕获的必然是父节点, 然后一层层向下捕获, 然后一层层向上冒泡 这里是一个 td 被点击的效果图 图片 通过三个阶段:...捕捉阶段: 从父节点, 逐渐向目标节点冒泡, 即自上向下 接近目标 elem 阶段(这一阶段会同时激活第一阶段和第三阶段的 handler) 冒泡阶段: 从子节点向父节点冒泡 事件绑定机制 onXXX...放置在捕捉阶段 仅仅对于elem.on(event, selector, handler), 只需要return false可以既阻止默认事件, 又防止冒泡 阻止冒泡 一般不需要阻止冒泡, 因为阻止冒泡之后...,可能影响其他事件捕捉机制 组织冒泡的核心在于这个函数:event.stopPropagation() 阻止冒泡之后, 事件将不会继续传递 下面这一段就不会调用到body的onclick <body...//oEvent.cancelBubble = true; //oEvent.stopPropagation(); //以下两种情况阻止默认行为, 没有停止冒泡 //没有停止冒泡 //oEvent.preventDefault
依次触发其祖先节点的同类型事件,直到DOM根节点 事件捕获 当节点事件被触发时,会从DOM根节点开始,依次触发其子孙节点的同类型事件,直到当前节点自身。...后来ECMAScript将两种模型进行了整合,制定了统一的标准:先捕获在冒泡 现在整合后的标准事件流就有了三个阶段: 事件捕获阶段(目标在捕获阶段不接收事件) 目标阶段 (事件的执行阶段,此阶段会被归入冒泡阶段...) 事件冒泡阶段 (事件传回Dom根节点) Tips: DOM2级事件规定了在捕获阶段不会涉及到目标阶段事件,但在IE9、Safari、Chrome、Firefox和Opera9.5及更高版本都会在捕获阶段触发目标事件上的事件...参数 描述 event 必须,字符串,指定事件名 function 必须,指定事件触发时要执行的函数 useCapture 可选值,指定事件是否在捕获或者冒泡阶段执行;1、true:事件句柄在捕获阶段执行...六、stopPropagation()阻止捕获 stopPropagation() 方法防止调用相同事件的传播。 传播意味着向上冒泡到父元素或向下捕获到子元素。
布尔值,指定事件是否在捕获或冒泡阶段执行。...默认false:在冒泡阶段执行指定事件 true:在捕获阶段执行事件 event.stopPropagation():阻止事件传播,用于function(event){}中 图解捕获与冒泡 实例:aa...,再按aa>bb>cc依次冒泡;因为第三个参数(useCapture)为true,所以在捕获阶段执行各自click函数,结果如下: aa bb cc 3....当js修改为 function print(e){ e.stopPropagation();//执行完此函数后,该事件不再继续传播 console.log(this.id);...cc,执行cc的click函数, 因为print函数中有e.stopPropagation(),所以执行完该函数后,click事件不再传播.结果如下: aa 版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人
本文链接:https://ligang.blog.csdn.net/article/details/41456897 事件在触发后分为两个阶段,一个是捕获(Capture),另一个则是冒泡(Bubbling...)但遗憾的是,大多数浏览器并不支持捕获阶段,jQuery也不支持。...1.所谓的冒泡其实实质就是事件执行中的顺序。防止冒泡的发生:除了使用stopPropagation()方法阻止事件的冒泡过程外,还可以通过语句return false实现停止事件的冒泡过程。 2....遇到执行ready()方法时,通过查看isReady值是否被设置,如果未被设置,那么就说明页面并未加载完成,在此情况下,将未完成的部分用一个数组缓存起来,待ready()方法加载完成后,再将未完成的部分通过缓存一一执行...trigger()方法可以实现触发性事件,即不必用户做任何动作,自动执行该方法中的事件。
DOM事件流 “DOM2级事件”规定了事件流包括三个阶段:事件捕获阶段,处理目标阶段和事件冒泡阶段。首先发生的是事件捕获,为截获事件提供了机会。然后是实际的目标接收到事件。最后是事件冒泡。...事件捕获: document->html->body 处理目标: 事件处理 事件冒泡: div->body->html->document 2) 事件处理程序 事件就是用户或浏览器自身执行的某种动作...addEventListener() 事件绑定 参数: 要绑定的事件名 作为事件处理的函数 布尔值:true在捕获阶段调用事件处理程序;false在冒泡阶段调用 removeEventListener...() 事件删除 参数: 要删除的事件名 作为事件处理的函数 布尔值:true在捕获阶段调用事件处理程序;false在冒泡阶段调用 例如: //事件绑定 var btn = document.getElementById...preventDefault() Function 取消事件的默认行为 stopPropagation() Function 取消事件的进一步捕获或者冒泡 在事件处理程序内部,对象this始终等于currentTarget
DOM事件流 事件流描述的是从页面中接收事件的顺序。 事件发生时会在元素节点之间按照特定的顺序传播,这个传播过程即 DOM 事件流。... 事件捕获: 网景最早提出,由 DOM 最顶层节点开始,然后逐级向下传播到到最具体的元素接收的过程。 DOM 事件流分为3个阶段: 1. 捕获阶段 2. 当前目标阶段 3....冒泡阶段 我们向水里面扔一块石头,首先它会有一个下降的过程,这个过程就可以理解为从最顶层向事件发生的最具体元素(目标点)的捕获过程;之后会产生泡泡,会在最低点( 最具体元素)之后漂浮到水面上,这个过程相当于事件冒泡...事件发生时会在元素节点之间按照特定的顺序传播,这个传播过程即 DOM 事件流。 注意 1. JS 代码中只能执行捕获或者冒泡其中的一个阶段。 ... 标准写法:利用事件对象里面的 stopPropagation()方法 e.stopPropagation() 非标准写法:IE 6-8 利用事件对象 cancelBubble 属性
JavaScript冒泡和捕获是事件的两种行为,使用event.stopPropagation()起到阻止捕获和冒泡阶段中当前事件的进一步传播。...防止冒泡和捕获 w3c的方法是e.stopPropagation(),IE则是使用e.cancelBubble = true stopPropagation也是事件对象(Event)的一个方法,用是阻止目标元素的冒泡事件...什么是冒泡事件?如在一个按钮是绑定一个”click”事件,那么”click”事件会依次在它的父级元素中被触发 。 stopPropagation就是阻止目标元素的事件冒泡到父级元素。...,可以使用 function stopBubble(e) { //如果提供了事件对象,则这是一个非IE浏览器 if ( e && e.stopPropagation ) //因此它支持W3C...的stopPropagation()方法 e.stopPropagation(); else //否则,我们需要使用IE的方式来取消事件冒泡 window.event.cancelBubble
DOM事件流(event flow )存在三个阶段:事件捕获阶段、处于目标阶段、事件冒泡阶段。...事件捕获*(****event capturing****)*:通俗的理解就是,当鼠标点击或者触发dom事件时,浏览器会从根节点开始由外到内进行事件传播,即点击了子元素,如果父元素通过事件捕获方式注册了对应的事件的话...不同的浏览器对此有着不同的实现,IE10及以下不支持捕获型事件,所以就少了一个事件捕获阶段,IE11、Chrome 、Firefox、Safari等浏览器则同时存在。...addEventListener()方法 这个方法设定一个事件监听器,当某一事件发生通过设定的参数执行操作。...) }); 输出结果(点击div2的时候执行的结果) ?
(Node.js 的事件模型、浏览器插件WebExtensions技术的事件模型) 1.3 事件冒泡及捕获 当一个事件发生在具有父元素的元素上时,浏览器运行两个不同的阶段 - 捕获阶段和冒泡阶段。...在现代浏览器中,默认情况下,所有事件处理程序都在冒泡阶段进行注册。 捕获阶段:浏览器检查元素的最外层祖先,是否在捕获阶段中注册了一个onclick事件处理程序,如果是,则运行它。...然后,它移动到中单击元素的下一个祖先元素,并执行相同的操作,依此类推,直到到达实际点击的元素。...冒泡阶段:浏览器检查实际点击的元素是否在冒泡阶段中注册了一个onclick事件处理程序,如果是,则运行它。然后它移动到下一个直接的祖先元素,并做同样的事情,直到它到达元素。...通过标准事件对象的 stopPropagation()函数来修复事件冒泡问题 当在事件对象上调用该函数时,它只会让当前事件处理程序运行,但事件不会在冒泡链上进一步扩大,因此将不会有更多事件处理器被运行
领取专属 10元无门槛券
手把手带您无忧上云