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 相关文章推荐
js的with语句使用方法
Sep 21 Javascript
prototype Element学习笔记(篇一)
Oct 26 Javascript
JavaScript中constructor()方法的使用简介
Jun 05 Javascript
jQuery简单验证上传文件大小及类型的方法
Jun 02 Javascript
JS使用cookie实现只出现一次的广告代码效果
Apr 22 Javascript
js实现简易聊天对话框
Aug 17 Javascript
微信小程序实现上传图片功能
May 28 Javascript
React Native基础入门之初步使用Flexbox布局
Jul 02 Javascript
video.js 实现视频只能后退不能快进的思路详解
Aug 09 Javascript
Net微信网页开发 使用微信JS-SDK获取当前地理位置过程详解
Aug 26 Javascript
关于vue2强制刷新,解决页面不会重新渲染的问题
Oct 29 Javascript
v-slot和slot、slot-scope之间相互替换实例
Sep 04 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
收集的DedeCMS一些使用经验
2007/03/17 PHP
对象失去焦点时自己动提交数据的实现代码
2012/11/06 PHP
PHP对接微信公众平台消息接口开发流程教程
2014/03/25 PHP
php开启openssl的方法
2014/05/15 PHP
php时间函数用法分析
2016/05/28 PHP
Laravel框架验证码类用法实例分析
2019/09/11 PHP
JavaScript CSS修改学习第一章 查找位置
2010/02/19 Javascript
现如今最流行的JavaScript代码规范
2014/03/08 Javascript
深入探讨JavaScript、JQuery屏蔽网页鼠标右键菜单及禁止选择复制
2014/06/10 Javascript
微信小程序实战之顶部导航栏(选项卡)(1)
2020/06/19 Javascript
node.js 发布订阅模式的实例
2017/09/10 Javascript
node.js的exports、module.exports与ES6的export、export default深入详解
2017/10/26 Javascript
基于vue监听滚动事件实现锚点链接平滑滚动的方法
2018/01/17 Javascript
详解vue-cli 构建项目 vue-cli请求后台接口 vue-cli使用axios、sass、swiper
2018/05/28 Javascript
layui结合form,table的全选、反选v1.0示例讲解
2018/08/15 Javascript
Vue点击切换颜色的方法
2018/09/13 Javascript
js逆向解密之网络爬虫
2019/05/30 Javascript
前端Electron新手入门教程详解
2019/06/21 Javascript
layui表格内放置图片,并点击放大的实例
2019/09/10 Javascript
Python格式化css文件的方法
2015/03/10 Python
简介Django框架中可使用的各类缓存
2015/07/23 Python
Django教程笔记之中间件middleware详解
2018/08/01 Python
python 在指定范围内随机生成不重复的n个数实例
2019/01/28 Python
Python multiprocessing多进程原理与应用示例
2019/02/28 Python
python,Django实现的淘宝客登录功能示例
2019/06/12 Python
Django中使用CORS实现跨域请求过程解析
2019/08/05 Python
Python批量安装卸载1000个apk的方法
2020/04/10 Python
如何利用python web框架做文件流下载的实现示例
2020/06/02 Python
python3获取控制台输入的数据的具体实例
2020/08/16 Python
python语音识别指南终极版(有这一篇足矣)
2020/09/09 Python
Html5 localStorage入门教程
2018/04/26 HTML / CSS
财务科科长岗位职责
2014/03/10 职场文书
小学班长竞选演讲稿
2014/04/24 职场文书
副总经理任命书
2014/06/05 职场文书
遗嘱继承权公证书
2015/01/26 职场文书
小学数学教学反思范文
2016/02/16 职场文书