js点击事件的执行过程实例分析【冒泡与捕获】


Posted in Javascript onApril 11, 2020

本文实例讲述了js点击事件的执行过程。分享给大家供大家参考,具体如下:

js事件对象event包括很多事件类型,这里用onclick事件为例,探讨一下在js事件捕获机制和冒泡机制下的执行过程,以及如何阻止事件的捕获和冒泡。

首先看下当我们点击一个元素后,浏览器的执行过程。

1,当某个元素绑定的事件被触发时,这时浏览器就会从顶级document元素发出一个事件流

2,这个事件流顺着dom层级,一层一层向下找,直到遇到了触发事件的目标元素,这个查找的过程是捕获阶段

  说明:捕获阶段,在查找每一层dom时,遇到相同的事件默认不执行,元素的事件默认在冒泡阶段执行

3,到达目标元素后会触发目标元素绑定的事件函数,也就是目标元素事件函数处理阶段

4,在处理过目标元素事件后,在顺着dom层级一层一层向上查找,这时对应dom上如果有相同的事件,默认会被触发,冒泡阶段

实例:

<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <meta http-equiv="X-UA-Compatible" content="ie=edge">
  <title>Document</title>
</head>
<body>
  
 <div class="box" style="width:300px;height:300px;background:green;" οnclick="firstClick()">
  parent
  <div class="child" οnclick="secondClick()">child
    <div class="button" onclick = "thirdClick()">提交</div>
  </div>
</div>
<script>
  var divs=document.querySelectorAll("div");//获取所有的divs
  function firstClick(){
    alert('firstClick')
  }
  function secondClick(){
    alert('secondClick')
  }
  function thirdClick(){
    alert('thirdClick')
  }
  function fn0(){
    alert("box");
  }
  function fn1(){
    alert("child");
  }
  function fn2(){
    alert("but");
  }
  divs[0].addEventListener("click",fn0,false);
  divs[1].addEventListener("click",fn1,false);
  divs[2].addEventListener("click",fn2,false);
</script>
</body>
</html>

说明:

addEventListener有三个参数,最后一个参数是决定元素事件的触发阶段,默认是false,在冒泡阶段执行,设置为true,则在捕获阶段执行。

在dom上直接绑定的事件会在addEventListenter监听的事件执行之后执行。

阻止冒泡:

onclick = function(e){
  e=e||window.event;
    if(e.stopPropagation){
    e.stopPropagation();//其它浏览器
  }else{
    e.cancelBubble=true;//IE浏览器
  }
}

阻止捕获:判断e.target

function fn0(e){
  if(e.target == divs[0]){
    alert("fn0");
  }
}
divs[0].addEventListener("click",fn0,true);

感兴趣的朋友可以使用在线HTML/CSS/JavaScript代码运行工具:http://tools.3water.com/code/HtmlJsRun测试上述代码运行效果。

希望本文所述对大家JavaScript程序设计有所帮助。

Javascript 相关文章推荐
jQuery的初始化与对象构建之浅析
Apr 12 Javascript
jQuery对于显示和隐藏等常用状态的判断方法
Dec 13 Javascript
深入分析原生JavaScript事件
Dec 29 Javascript
JS往数组中添加项性能分析
Feb 25 Javascript
谷歌Chrome浏览器扩展程序开发小记
Jan 06 Javascript
极易被忽视的javascript面试题七问七答
Feb 15 Javascript
基于JavaScript实现滑动门效果
Mar 16 Javascript
vue页面使用阿里oss上传功能的实例(一)
Aug 09 Javascript
浅谈针对Vue相同路由不同参数的刷新问题
Sep 29 Javascript
通过JS运行机制的角度说说作用域
Mar 12 Javascript
layui switch 开关监听 弹出确定状态转换的例子
Sep 21 Javascript
详解Node.JS模块 process
Aug 31 Javascript
JavaScript运行机制实例分析
Apr 11 #Javascript
js中调用微信的扫描二维码功能的实现代码
Apr 11 #Javascript
微信公众号中的JSSDK接入及invalid signature等常见错误问题分析(全面解析)
Apr 11 #Javascript
微信分享invalid signature签名错误踩过的坑
Apr 11 #Javascript
vue.js中使用微信扫一扫解决invalid signature问题(完美解决)
Apr 11 #Javascript
vue使用微信扫一扫功能的实现代码
Apr 11 #Javascript
Vue 中 template 有且只能一个 root的原因解析(源码分析)
Apr 11 #Javascript
You might like
一个目录遍历函数
2006/10/09 PHP
php日历[测试通过]
2008/03/27 PHP
PHP+iFrame实现页面无需刷新的异步文件上传
2014/09/16 PHP
php网站被挂木马后的修复方法总结
2014/11/06 PHP
PHP常见漏洞攻击分析
2016/02/21 PHP
php编译安装php-amq扩展简明教程
2016/06/25 PHP
php-fpm中max_children的配置
2019/03/15 PHP
JS 无限级 Select效果实现代码(json格式)
2011/08/30 Javascript
基于jQuery的弹出框插件
2012/03/18 Javascript
网站内容禁止复制和粘贴、另存为的js代码
2014/02/26 Javascript
node.js中的buffer.toJSON方法使用说明
2014/12/14 Javascript
javascript面向对象之对象的深入理解
2015/01/13 Javascript
javascript函数特点实例分析
2015/05/14 Javascript
基于bootstrap插件实现autocomplete自动完成表单
2016/05/07 Javascript
jQuery Ajax使用FormData对象上传文件的方法
2016/09/07 Javascript
使用Bootstrap打造特色进度条效果
2017/05/02 Javascript
详解js类型判断
2018/05/22 Javascript
js删除数组中某几项的方法总结
2019/01/16 Javascript
JS多个表单数据提交下的serialize()应用实例分析
2019/08/27 Javascript
使用vuex较为优雅的实现一个购物车功能的示例代码
2019/12/09 Javascript
[13:40]TI3青蛙君全程回顾 DOTA2我们为梦想再战
2013/09/13 DOTA
[04:11]DOTA2亚洲邀请赛小组赛第一日 TOP10精彩集锦
2015/01/30 DOTA
[02:41]《西雅图我们来了》2015国际邀请赛出征全记录
2015/07/23 DOTA
python生成验证码图片代码分享
2016/01/28 Python
tensorflow创建变量以及根据名称查找变量
2018/03/10 Python
详解Python_shutil模块
2019/03/15 Python
Python基于机器学习方法实现的电影推荐系统实例详解
2019/06/25 Python
Python帮你微信头像任意添加装饰别再@微信官方了
2019/09/25 Python
一文带你掌握Pyecharts地理数据可视化的方法
2021/02/06 Python
美国餐厅用品和厨房设备批发网站:KaTom Restaurant Supply
2018/01/27 全球购物
孕妇内衣和胸罩:Cake Maternity
2018/07/16 全球购物
Cecil Mode法国在线商店:女性时尚
2021/01/08 全球购物
军校制空专业毕业生自我鉴定
2013/11/16 职场文书
户外拓展活动方案
2014/02/11 职场文书
超市开业庆典策划方案
2014/05/14 职场文书
门面房租房协议书
2014/12/01 职场文书