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 相关文章推荐
javascript的事件描述
Sep 08 Javascript
Package.js  现代化的JavaScript项目make工具
May 23 Javascript
12款经典的白富美型—jquery图片轮播插件—前端开发必备
Jan 08 Javascript
button没写type=button会导致点击时提交
Mar 06 Javascript
详解Bootstrap创建表单的三种格式(一)
Jan 04 Javascript
原生JS实现简单放大镜效果
Feb 08 Javascript
Vue实现一个返回顶部backToTop组件
Jul 25 Javascript
基于Vue单文件组件详解
Sep 15 Javascript
详解vue-element Tree树形控件填坑路
Mar 26 Javascript
基于Bootstrap和JQuery实现动态打开和关闭tab页的实例代码
Jun 10 jQuery
Vue 权限控制的两种方法(路由验证)
Aug 16 Javascript
Vue 动态路由的实现及 Springsecurity 按钮级别的权限控制
Sep 05 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
PHP更新购物车数量(表单部分/PHP处理部分)
2013/05/03 PHP
php中用加号与用array_merge合并数组的区别深入分析
2013/06/03 PHP
php define的第二个参数使用方法
2013/11/04 PHP
详解PHP导入导出CSV文件
2014/11/03 PHP
php使用str_replace实现输入框回车替换br的方法
2014/11/24 PHP
Open and Print a Word Document
2007/06/15 Javascript
javascript 函数调用规则
2009/08/26 Javascript
取得窗口大小 兼容所有浏览器的js代码
2011/08/09 Javascript
分享几个超级震憾的图片特效
2012/01/08 Javascript
用js小类库获取浏览器的高度和宽度信息
2012/01/15 Javascript
js实现宇宙星空背景效果的方法
2015/03/03 Javascript
浅谈被jQuery抛弃的函数及替代函数
2015/05/03 Javascript
JavaScript中pop()方法的使用教程
2015/06/09 Javascript
JS+CSS实现大气的黑色首页导航菜单效果代码
2015/09/10 Javascript
jQuery中选择器的基础使用教程
2016/05/23 Javascript
浅谈在react中如何实现扫码枪输入
2018/07/04 Javascript
Bootstrap 实现表格样式、表单布局的实例代码
2018/12/09 Javascript
layer实现弹出层自动调节位置
2019/09/05 Javascript
用vue设计一个日历表
2020/12/03 Vue.js
python内存管理分析
2015/04/08 Python
Python批量重命名同一文件夹下文件的方法
2015/05/25 Python
基于python实现微信模板消息
2015/12/21 Python
几个适合python初学者的简单小程序,看完受益匪浅!(推荐)
2019/04/16 Python
Python操作qml对象过程详解
2019/09/26 Python
Django实现基于类的分页功能
2019/10/31 Python
用canvas实现图片滤镜效果附演示
2013/11/05 HTML / CSS
美国最受欢迎的度假目的地优惠套餐:BookVIP
2018/09/27 全球购物
伦敦一卡通:The London Pass
2018/11/30 全球购物
写给女朋友的道歉信
2014/01/08 职场文书
副职竞争上岗演讲稿
2014/05/12 职场文书
美食节策划方案
2014/05/26 职场文书
财务工作检讨书
2014/10/29 职场文书
2014年采购工作总结
2014/11/20 职场文书
幼儿园中班教师个人总结
2015/02/05 职场文书
2015年三八妇女节活动总结
2015/02/06 职场文书
傲慢与偏见读书笔记
2015/06/29 职场文书