js点击事件的执行过程实例分析【冒泡与捕获】
作者:qdmoment 发布时间:2024-02-27 07:53:34
标签:js,事件,冒泡,捕获
本文实例讲述了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);
希望本文所述对大家JavaScript程序设计有所帮助。
来源:https://blog.csdn.net/qdmoment/article/details/100152902


猜你喜欢
- 本文实例讲述了Python操作json的方法。分享给大家供大家参考,具体如下:python中对json操作方法有两种,解码loads()和编
- 跳过开头首先是跳过开始部分,这个在我们读取文本的时候最常用。在实际的应用当中,比如记录的日志或者是代码等等,一般来说头部都会附上一段说明,或
- 一、背景俗话说,工欲善其事,必先利其器。go 作为一个对基础功能封装非常好的语言,对编码体验,如何更高效地写出高性能代码,都是考虑非常好的。
- 还是用图说话A文件:比如,我想筛选出“设计井别”、“投产井别”、“目前井别”三列数据都为11的数据,结果如下:当然,这里的筛选条件可以根据用
- 特殊情况有 * ^ : | . \一、单个符号作为分隔符String address="上海\上海市|闵行区\吴中路";
- 需求是要做一个tag,当切换页面的时候保留状态。效果图:思路既然涉及了router跳转,那我们就去查api 发现keep-alive,巧了就
- 上篇文章介绍了什么是进程、进程与程序的关系、进程的创建与使用、创建进程池等,接下来就来介绍一下进程同步及进程通信。进程同步当多个进程使用同一
- 一、基本使用①从属于time这个包②一般使用都是使用time.Time 这个类型表示时间 ,time包中还有一些常量,源码如下// Comm
- 使方法一、用IP138数据库查询域名或IP地址对应的地理位置。#-*- coding:gbk -*-import urllib2import
- 异常处理程序运行时,发生的不被期望的事件,它阻止了程序按照程序员的预期正常执行,这就是异常golang中提供了两种处理异常的方式一种是程序发
- 使用Tkinter(py2.7)text文本框中输入内容在界面中显示–较为规整的代码:import Tkinter as tkclass W
- 目录1.数据库主从分类:2.mysql主从介绍由来3.主从作用4.主从复制原理5.主从复制配置(数据一致时)5.1主从服务器分别安装mysq
- 今天看到某人博客推荐了http://dragoninteractive.com/这个网站,貌似一些效果做的比较不错,于是打开了看看,不过还真
- reflect.StructField 和 reflect.Method如果变量是一个结构体,我们还可以通过结构体域类型对象 reflect
- 前沿最近开始学习python了,由于要简单处理一下图片,奈何能C++力太差,openCV上手有点难,想学习一下py简单的处理一下图片就好了。
- 这里介绍了5中python获取window桌面路径的方法,获取这个路径有什么用呢?一般是将程序生成的文档输出到桌面便于查看编辑。前两个方法是
- 一.使用DOM生成和读取XML文件 实例一: <?php //Creates XML string and XML document
- 本文深入剖析了python中dict,set,list,tuple应用及对应示例,有助于读者对其概念及原理的掌握。具体如下:1.字典(dic
- 进入智联招聘官网,在搜索界面输入‘数据分析师',界面跳转,按F12查看网页源码,点击network 选中XHR,然后刷新网
- 1.尽量将资源文件夹放到主文件夹下2.pyi-makespec main.py制作spec文件3.spec文件在当前文件夹下,main.sp