JS事件的三个阶段详解

  • 一、JS事件的三个阶段
  • 二、冒泡阶段触发事件
  • 三、捕获阶段触发事件
  • 四、阻止冒泡行为
  • 五、阻止事件冒泡和默认行为

一、JS事件的三个阶段

事件处理机制的三个阶段:1.捕获 2.目标 3.冒泡

element.addEventListener(event, function, useCapture)
useCapture:事件处理机制(捕获阶段true,目标阶段,冒泡阶段false)默认为冒泡阶段
捕获阶段:事件从外向内执行; 冒泡阶段:事件从内向外执行


当点击目标元素的时候就是这三步,唯一的区别是你控制事件触发在哪个阶段

所以我们可以看到要想截获事件必须要在目标元素事件发生之前,也就是捕获阶段。

二、冒泡阶段触发事件

<style>#father {height: 200px;width: 200px;background-color: red;}#son {height: 100px;width: 100px;background-color: green;}
</style>
</head><body><div id="father"><div id="son"></div></div>
</body>
<script>document.getElementById('father').addEventListener('click', function (e) {console.log('这是father')}, false)document.getElementById('son').addEventListener('click', function (e) {console.log('这是son')}, false)
</script>

点击绿色区域时
冒泡阶段:事件从内向外执行

三、捕获阶段触发事件

<style>#father {height: 200px;width: 200px;background-color: red;}#son {height: 100px;width: 100px;background-color: green;}
</style>
</head><body><div id="father"><div id="son"></div></div>
</body>
<script>document.getElementById('father').addEventListener('click', function (e) {console.log('这是father')}, true)document.getElementById('son').addEventListener('click', function (e) {console.log('这是son')}, true)
</script>

点击绿色区域时
捕获阶段:事件从外向内执行

四、阻止冒泡行为

<style>#father {height: 200px;width: 200px;background-color: red;}#son {height: 100px;width: 100px;background-color: green;}
</style>
</head><body><div id="father"><div id="son"></div></div>
</body>
<script>document.getElementById('father').addEventListener('click', function (e) {console.log('这是father')}, false)document.getElementById('son').addEventListener('click', function (e) {console.log('这是son')e.stopPropagation()}, false)
</script>

点击绿色区域时
此时只会打印本身id为son的div,不会打印父级fathe的rdiv

五、阻止事件冒泡和默认行为

阻止事件的冒泡方法
w3c的方法是e.stopPropagation(),IE则是使用e.cancelBubble = true

event.stopPropagation()方法 这是阻止事件的冒泡方法,不让事件向documen上蔓延,但是默认事件任然会执行,当你掉用这个方法的时候,如果点击一个连接,这个连接仍然会被打开,

window.event?window.event.cancelBubble=true:e.stopPropagation();

阻止默认事件的方法
w3c的方法是e.preventDefault(),IE则是使用e.returnValue = false;

event.preventDefault()方法 这是阻止默认事件的方法,调用此方法是,连接不会被打开,但是会发生冒泡,冒泡会传递到上一层的父元素;

window.event?window.event.returnValue=false:e.preventDefault();

即能阻止事件冒泡也能阻止默认事件

javascript的return false只会阻止默认行为,而用jQuery的话则既阻止默认行为又防止对象冒泡。

JS事件的三个阶段详解相关推荐

  1. JS 事件大全及详解

    事件详解: 事件不会自己执行,需要触发(即事件被触发之后才可执行) 1.事件三要素: - 事件对象 - 事件名称 - 事件处理函数 2.常见事件写法: 1.嵌入式(传统事件绑定)优点:简单易懂缺点:将 ...

  2. php事件和行为,Yii框架组件和事件行为管理详解

    Yii框架组件和事件行为管理详解 来源:中文源码网    浏览: 次    日期:2018年9月2日 [下载文档:  Yii框架组件和事件行为管理详解.txt ] (友情提示:右键点上行txt文档名- ...

  3. JavaScript 的addEventListener() 事件监听详解!

    JavaScript 的addEventListener() 事件监听详解! addEventListener() 用于向指定元素添加事件.  可以向一个元素添加多次事件或者多次不同事件,后面的事件是 ...

  4. android listview ontouchlistener,Android ListView监听滑动事件的方法(详解)

    ListView的主要有两种滑动事件监听方法,OnTouchListener和OnScrollListener 1.OnTouchListener OnTouchListener方法来自View中的监 ...

  5. nodejs 本地php服务器,node.js创建本地服务器详解

    本文主要和大家分享node.js创建本地服务器详解,简易上手node.js后,我们就可以在自己电脑上创建本地服务器了.希望能帮助到大家. 一.先上代码.//请求Node.js自带的http模块. va ...

  6. Android 系统(199)---Android事件分发机制详解

    Android事件分发机制详解 前言 Android事件分发机制是Android开发者必须了解的基础 网上有大量关于Android事件分发机制的文章,但存在一些问题:内容不全.思路不清晰.无源码分析. ...

  7. JQuery在循环中绑定事件的问题详解

    JQuery在循环中绑定事件的问题详解 有个页面上需要N个DOM,每个DOM里面的元素ID都要以数字结尾,比如说 ? 1 2 3 <input type="text" nam ...

  8. html学习 - jquery事件监听详解

    html学习 - jquery事件监听详解 html学习 - jquery事件监听详解 监听方法 监听方法参数解释 click参数 事件自动执行问题解决 bind方法 live方法 监听方法 在jqu ...

  9. js打印三角形超详解

    js打印三角形超详解 j控制星星的总行数,i控制每行星星的打印个数 打印图形如下: (1) (2) //str=""用来存储星星// 理解步骤1:在一行输出6个星星如何操作,在循环 ...

最新文章

  1. ext2文件系统 - mke2fs
  2. 如何将response里header的date转化为当地时间_外贸独立站卖家如何选择收款方式?...
  3. 谷歌官方TensorFlow开发者认证来了,吴恩达:学我的课,报名费五折
  4. 数据结构-顺序查找算法的实现(C语言)
  5. Python面向对象编程基础
  6. 一加8T真机渲染图泄露:后置四摄+双闪光灯
  7. 深入分析 iBATIS 框架之系统架构与映射原理【转】
  8. python求一元三次方程的根_关于二次、三次、四次方程求解方法讨论
  9. mysql-----触发器
  10. 论文中baseline是什么意思?
  11. 小波同态滤波 matlab,简单的同态滤波(matlab)
  12. IOS开发之-人脸识别
  13. 机房搬迁实施规划方案
  14. vue+ele 使用及demo
  15. 腾讯面试Android开发
  16. wetool个人版_淘客干货:用了3年的wetool也没能幸免
  17. 用python可以画的可爱的图形_用Python的Turtple画图形
  18. 2022年中职组“网络安全”赛项湖南省任务书
  19. 用ECMAScript4 ( ActionScript3) 实现Unity的热更新 -- Demo分析
  20. px 、 rem 、 vw学习

热门文章

  1. jzoj5937 斩杀计划 贪心
  2. vue/cli是什么?vue/cli如何使用? 入门篇(安装创建,组件使用,定义路由,项目导出) ∠( °ω°)/ 前端知识
  3. 使用maven创建项目连接mysql
  4. 【微信小程序】邮箱格式验证
  5. 手变小是怎么回事_怎么让手指变细变长 9个小习惯轻松帮你解决
  6. 普林斯顿结构与哈佛结构
  7. c语言尼禄编辑器,编写汇编语言的工具
  8. VS-openGL 绘制五角星
  9. python gui按顺序显示图片_python tkinter GUI绘制,以及点击更新显示图片代码
  10. 北京交通大学2022-2023学年第一学期研究生《随机过程I》试题