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 Jcrop插件实现图片选取功能
Nov 23 Javascript
jquery判断小数点两位和自动删除小数两位后的数字
Mar 19 Javascript
JS实现两个大数(整数)相乘
Apr 28 Javascript
jquery动态添加删除一行数据示例
Jun 12 Javascript
JS中setTimeout的巧妙用法前端函数节流
Mar 24 Javascript
jQuery隐藏和显示效果实现
Apr 06 Javascript
浅谈JS的基础类型与引用类型
Sep 13 Javascript
vue2.0中goods选购栏滚动算法的实现代码
May 17 Javascript
JS实现无缝循环marquee滚动效果
May 22 Javascript
微信小程序swiper组件用法实例分析【附源码下载】
Dec 07 Javascript
详解vue父子组件关于模态框状态的绑定方案
Jun 05 Javascript
vue项目中在可编辑div光标位置插入内容的实现代码
Jan 07 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
骨王战斗力在公会成员中排不进前五,却当选了会长,原因竟是这样
2020/03/02 日漫
怎样辨别一杯好咖啡
2021/03/03 新手入门
PHP安全技术之 实现php基本安全
2010/09/04 PHP
解析php curl_setopt 函数的相关应用及介绍
2013/06/17 PHP
ThinkPHP Where 条件中常用表达式示例(详解)
2017/03/31 PHP
PHP连接MySQL数据库并以json格式输出
2018/05/21 PHP
基本jquery的控制tabs打开的数量的代码
2010/10/17 Javascript
实现web打印的各种方法介绍及实现代码
2013/01/09 Javascript
解决ueditor jquery javascript 取值问题
2014/12/30 Javascript
javascript实现类似百度分享功能的方法
2015/07/27 Javascript
JavaScript实现的CRC32函数示例
2016/11/23 Javascript
在javascript中,null>=0 为真,null==0却为假,null的值详解
2017/02/22 Javascript
详解webpack解惑:require的五种用法
2017/06/09 Javascript
五步轻松实现JavaScript HTML时钟效果
2020/03/25 Javascript
详解ES6 Symbol 的用途
2018/10/14 Javascript
Python基于scapy实现修改IP发送请求的方法示例
2017/07/08 Python
Python使用plotly绘制数据图表的方法
2017/07/18 Python
Python编程求解二叉树中和为某一值的路径代码示例
2018/01/04 Python
Django网络框架之创建虚拟开发环境操作示例
2019/06/06 Python
Django对数据库进行添加与更新的例子
2019/07/12 Python
对Django项目中的ORM映射与模糊查询的使用详解
2019/07/18 Python
后端开发使用pycharm的技巧(推荐)
2020/03/27 Python
阿迪达斯丹麦官网:adidas丹麦
2016/10/01 全球购物
物业公司采购员岗位职责
2013/12/31 职场文书
初一地理教学反思
2014/01/16 职场文书
幼师求职自荐信范文
2014/01/26 职场文书
不打扫卫生检讨书
2014/02/12 职场文书
金融事务专业毕业生求职信
2014/02/23 职场文书
《蜗牛的奖杯》教后反思
2014/04/24 职场文书
献爱心捐款倡议书
2014/05/14 职场文书
2014年学校总务处工作总结
2014/12/08 职场文书
2015年度内部审计工作总结
2015/05/20 职场文书
呼兰河传读书笔记
2015/06/30 职场文书
文明礼貌主题班会
2015/08/14 职场文书
创业计划书之香辣虾火锅
2019/09/23 职场文书
一篇文章弄清楚Ajax请求的五个步骤
2022/03/17 Javascript