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+xml自动生成表格的东西
Dec 21 Javascript
基于jquery的Repeater实现代码
Jul 17 Javascript
ajax 缓存 问题 requestheader
Aug 01 Javascript
jquery mobile changepage的三种传参方法介绍
Sep 13 Javascript
JavaScript判断用户是否对表单进行了修改的方法
Mar 18 Javascript
JavaScript中的Math.sin()方法使用详解
Jun 15 Javascript
10个JavaScript中易犯小错误
Feb 14 Javascript
JS实现兼容各种浏览器的获取选择文本的方法【测试可用】
Jun 21 Javascript
jQuery实现ajax的叠加和停止(终止ajax请求)
Aug 08 Javascript
extjs简介_动力节点Java学院整理
Jul 17 Javascript
Element Carousel 走马灯的具体实现
Jul 26 Javascript
jQuery实现回到顶部效果
Oct 19 jQuery
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 error_log()将错误信息写入一个文件(定义和用法)
2013/10/25 PHP
PHP抓取网页、解析HTML常用的方法总结
2015/07/01 PHP
php计划任务之验证是否有多个进程调用同一个job的方法
2015/12/07 PHP
Zend Framework自定义Helper类相关注意事项总结
2016/03/14 PHP
CI(CodeIgniter)框架中URL特殊字符处理与SQL注入隐患分析
2019/02/28 PHP
laravel实现于语言包的完美切换方法
2019/09/29 PHP
初窥JQuery(二) 事件机制(1)
2010/11/25 Javascript
JQuery扩展插件Validate 1 基本使用方法并打包下载
2011/09/05 Javascript
Array.prototype.concat不是通用方法反驳[译]
2012/09/20 Javascript
js中页面的重新加载(当前页面/上级页面)及frame或iframe元素引用介绍
2013/01/24 Javascript
深入理解Javascript里的依赖注入
2014/03/19 Javascript
javascript学习笔记(二)数组和对象部分
2014/09/30 Javascript
angularjs指令中的compile与link函数详解
2014/12/06 Javascript
jquery增加和删除元素的方法
2015/01/14 Javascript
javascript去除字符串左右两端的空格
2015/02/05 Javascript
jQuery 回调函数(callback)的使用和基础
2015/02/26 Javascript
jQuery实现右侧显示可向左滑动展示的深色QQ客服效果代码
2015/10/23 Javascript
JS验证逗号隔开可以是中文字母数字
2016/04/22 Javascript
JavaScript中this的用法实例分析
2016/12/19 Javascript
jQuery使用动画队列自定义动画操作示例
2018/06/16 jQuery
IE8中jQuery.load()加载页面不显示的原因
2018/11/15 jQuery
详解javascript设计模式三:代理模式
2019/03/25 Javascript
js找出5个数中最大的一个数和倒数第二大的数实现方法示例小结
2020/03/04 Javascript
JavaScript 链表定义与使用方法示例
2020/04/28 Javascript
python使用新浪微博api上传图片到微博示例
2014/01/10 Python
快速了解Python相对导入
2018/01/12 Python
Python TCPServer 多线程多客户端通信的实现
2019/12/31 Python
Python实现井字棋小游戏
2020/03/09 Python
在keras里面实现计算f1-score的代码
2020/06/15 Python
HTML5、Select下拉框右边加图标的实现代码(增进用户体验)
2017/10/16 HTML / CSS
优秀应届毕业生推荐信
2014/02/18 职场文书
求职信内容怎么写
2014/05/26 职场文书
先进班集体事迹材料
2014/12/25 职场文书
成品仓库管理员岗位职责
2015/04/09 职场文书
运动会三级跳加油稿
2015/07/21 职场文书
仅仅使用 HTML/CSS 实现各类进度条的方式汇总
2021/11/11 HTML / CSS