事件捕获阶段:事件从最上一级标签开始往下查找,直到捕获到事件目标(target)。

事件冒泡阶段:事件从事件目标(target)开始,往上冒泡直到页面的最上一级标签。

用图示表示如下:

1、冒泡事件:

事件按照从最特定的事件目标到最不特定的事件目标(document对象)的顺序触发。通俗来讲就是,就是当设定了多个div的嵌套时;即建立了父子关系,当父div与子div共同加入了onclick事件时,当触发了子div的onclick事件后,子div进行相应的js操作,但是父div的onclick事件同样会被触发。

<html lang="en">
<head>
<meta charset="UTF-8">
<title>测试事件冒泡</title>
<style>
div{padding:40px;}
#div1{background: #00B83F;}
#div2{background: #2a6496}
#div3{background: #93C3CF}
</style>
<script>
window.onload=function (){
var odiv1=document.getElementById("div1");
var odiv2=document.getElementById("div2");
var odiv3=document.getElementById("div3"); function fdiv1(){
alert("div1");
}
function fdiv2(){
alert("div2");
}
function fdiv3(ev){
alert("div3");
}
odiv1.onclick=fdiv1;
odiv2.onclick=fdiv2;
odiv3.onclick=fdiv3;
} </script> </head>
<body>
<div id="div1">
<div id="div2">
<div id="div3"></div>
</div>
</div>
</body>
</html>

测试结果:点击div3时,依次弹出div3,div2,div1

2.阻止事件冒泡:

给div3的绑定事件改为。ev.canceBubble=true;

  function fdiv3(ev){
var en=ev || event;
en.cancelBubble=true;
alert("div3");
}

测试结果:点击div3时,只弹出div3

3、事件捕获

从顶层元素到目标元素或者从目标元素到顶层元素,和事件冒泡是一个相反的过程。事件从最不精确的对象(document 对象)开始触发,然后到最精确(也可以在窗口级别捕获事件,不过必须由开发人员特别指定)。

代码更改如下:

<script>
window.onload=function (){
var odiv1=document.getElementById("div1");
var odiv2=document.getElementById("div2");
var odiv3=document.getElementById("div3"); odiv1.addEventListener("click",function(){
alert("div1");
},true);
odiv2.addEventListener("click",function(){
alert("div2");
},true);
odiv3.addEventListener("click",function(){
alert("div3");
},true);
}
</script>

测试结果:点击div3时,依次弹出div1,div2,div3

结论:绑定事件时通过addEventListener函数,它有三个参数,第三个参数若是true,则表示采用事件捕获,若是false,则表示采用事件冒泡。

JS中的事件冒泡和事件捕获的更多相关文章

  1. JS中的事件绑定,事件捕获,事件冒泡以及事件委托,兼容IE

    转载请注明出处:http://www.cnblogs.com/zhangmingze/p/4864367.html   ● 事件分为三个阶段:   事件捕获 -->  事件目标 -->   ...

  2. JavaScript 进阶教程一 JavaScript 中的事件流 - 事件冒泡和事件捕获

    先看下面的示例代码: <html xmlns="http://www.w3.org/1999/xhtml"> <head> <title>Jav ...

  3. JS事件(事件冒泡和事件捕获)

    事件流:描述的是在页面中接收事件的顺序 事件冒泡:由最具体的元素接收,然后逐级向上传播至最不具体的元素的节点(文档) 事件捕获:最不具体的节点先接收事件,而最具体的节点应该是最后接收事件 DOM中:用 ...

  4. js进阶 12-2 彻底弄懂JS的事件冒泡和事件捕获

    js进阶 12-2 彻底弄懂JS的事件冒泡和事件捕获 一.总结 一句话总结:他们是描述事件触发时序问题的术语.事件捕获指的是从document到触发事件的那个节点,即自上而下的去触发事件.相反的,事件 ...

  5. JS事件冒泡与事件捕获怎么理解?

    在js中存在事件冒泡与事件捕获两种概念,这两个概念都是为了解决页面中事件流(事件发生顺序)的问题. 事件冒泡(dubbed bubbling) 事件冒泡我们从字面意思理解就是当用户行为触发我们页面的定 ...

  6. javascript中的事件冒泡、事件捕获和事件执行顺序

    谈起JavaScript的 事件,事件冒泡.事件捕获.阻止默认事件这三个话题,无论是面试还是在平时的工作中,都很难避免. DOM事件标准定义了两种事件流,这两种事件流有着显著的不同并且可能对你的应用有 ...

  7. js 事件冒泡和事件捕获

    事件流:指的是网页中元素接受事件的顺序,它是一个概念,而不是具体的实际的东西 事件冒泡:指的是内层元素的事件,会触发包含着此元素的外层元素的事件,触发的顺序是:由内而外的 例如: <!DOCTY ...

  8. js高级:event,事件冒泡,事件捕获

    1.事件 浏览器客户端上客户触发的行为都称为事件 所有的事件都是天生自带的,不需要我们去绑定,只需要我们去触发. 通过 obj.事件名=function(){} 事件名:onmouseover 鼠标悬 ...

  9. 彻底弄懂JS的事件冒泡和事件捕获(不推荐阅读)

    由于搬去敌台了,好久没来博客园,今天无意中翻到有“误认子弟”的评论,这里特意做个说明. 本文中关于事件冒泡和事件捕获的描述和例子都是OK的,错就错在后面用jquery去展示了利用事件冒泡的例子有误,其 ...

  10. js事件(事件冒泡与事件捕获)

    事件冒泡和事件捕获分别由微软和网景公司提出,这两个概念都是为了解决页面中事件流(事件发生顺序)的问题. <div id='aa' click='po'> <p id='bb' cli ...

随机推荐

  1. centos 查看mysql数据库命令

    使用MySQL时,需要了解当前数据库的情况,例如当前的数据库大小.字符集.用户等等.下面总结了一些查看数据库相关信息的命令 1:查看显示所有数据库 mysql> show databases; ...

  2. user profile信息同步问题

    经过下午的远程会议, 该问题已经解决. 以下为小结以及针对AD同步账号的权限配置的要求: 纠正: 1. 将现有的所有User Profile Service Application 删除 2. 执行I ...

  3. vs 页面浏览不显示.aspx后缀名

    转:http://www.cnblogs.com/hllive/p/6029763.html 由vs2013新建“web窗体应用程序”的网站,URL不显示扩展名.那今天就实现该功能 1.首先打开vs2 ...

  4. IO模型《五》异步IO

    Linux下的asynchronous IO其实用得不多,从内核2.6版本才开始引入.先看一下它的流程: 用户进程发起read操作之后,立刻就可以开始去做其它的事.而另一方面,从kernel的角度,当 ...

  5. TensorFlow支持GPU配置问题

    目录 Tensorflow-GPU 环境条件 现有硬件 现有软件 硬件要求 软件要求 步骤 0.Visual studio 1.下载安装显卡驱动 2.下载对应版本 CUDA 3.安装配置 cuDNN ...

  6. pandas如何统计所有列的空值,并转化为list?

    统计所有列的空值:data.isnull().sum() 转化成list: df.isnull().sum().index.tolist() df.isnull().sum().values.toli ...

  7. 为什么int类型的数据可以存储超过9999?

    int占4字节,4*8=32位,10进制取值范围为 (-2^31-1)~(2^31-1):-2147483648~2147483647 package test; public class test1 ...

  8. Mongo限制规则

    文章翻译自来源:http://docs.mongodb.org/manual/reference/limits/#limit-bson-document-size 一.BSON 文档 1.BSON文档 ...

  9. jquery将json数据放入表格当中

    数据: var datas = [{ name:"淘宝", url:"www.taobao.com", type:"购物网站" },{ na ...

  10. StringBuffer类和String类的区别

    StringBuffer是使用缓冲区的,本身也是操作字符串的,但与String类不同,String类的内容一旦声明后是不可改变的,改变的只是其内存的指向,而StringBuffer类的对象内容是可以改 ...