前端-【学习心得】-聊一聊事件冒泡和事件捕获

<!DOCTYPE html> <html> <head> <meta charset="utf-8"> <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1"> <title>Examples</title> <meta name="description" content=""> <meta name="keywords" content=""> <link href="" rel="stylesheet"> <style>      #father{           width:300px;           height: 300px;           margin: 0 auto;           border: 1px solid #000;      }      #son{           width: 100px;           height: 100px;           margin: 0 auto;           border: 1px solid #000;      } </style> </head> <body>      <div id="father">     <div class="c" id="son"></div>     </div> </body> <script>           var father=document.getElementById("father");      father.addEventListener("click",function(e){           console.log(e.eventPhase);           console.log(e.target);           console.log("father");     },true)      father.addEventListener("click",function(e){           console.log(e.eventPhase);           console.log(e.target);           console.log("father");     },false)      var son=document.getElementById("son");      son.addEventListener("click",function(e){           console.log("son");           console.log(e.eventPhase);      }) </script>               </html>

首先贴一下代码,大家创建一个任意的html文件,比如a.html,然后把这段代码放进去。

用chrome浏览器打开,并审查元素,最后界面如下:

这里给了两个层,一个id=father,就是最外层,另一个id=son 就是最里层。

顺便简单介绍下浏览器的事件传递类型。

微软和早期的网景分别使用了事件冒泡和事件捕获,然后形成现在浏览器的事件机制。

事件冒泡就是说我点击son后,son先接收这个事件信息,然后传递给father,

事件捕获恰恰相反,先是father接收事件,然后是son。

然后es(就是标准js,ecma java script)规定的事件传递顺序是先捕获,再到事件处理,再到冒泡阶段。

那这样是不是说我一个点击事件发生后,先经过father,然后到son处理,再冒泡到father呢?

我们知道DOM2针对元素监听的方法是xx.addEventListener("事件名","处理函数","是否捕获")

默认情况下第三个参数是false,也就是不捕获而只冒泡。

返回我们的代码,可以看到我这里对father写了两个监听函数,一个是捕获,一个是冒泡,那么接下来让我们单击里层元素看看发生什么。

可以看到按顺序输出1,2,3以及在两个father处理函数输出事件对象,也就是son。

我在监听函数里写的console.log(e.eventPhase),这个是标示事件处理阶段

1-捕获 2-处理 3 冒泡

因此这里按照顺序输出。证明浏览器遵循的就是这个原则,当然我们平时写事件监听不会针对同一个元素的事件写两个处理顺序不同的处理函数,通常写的都是基于冒泡的。

因此我们把第二个监听函数去掉再看看

发现只有2 ,3输出,再次印证这个事实。

事件冒泡的机理可以让我们写事件委托来替代针对某元素内在相同的n个元素写监听函数。事件委托介绍我稍后再给大家。

时间: 2024-11-08 19:12:02

前端-【学习心得】-聊一聊事件冒泡和事件捕获的相关文章

事件冒泡、事件委托、jQuery元素节点操作、滚轮事件与函数节流

一.事件冒泡定义 事件冒泡是指在一个对象触发某类事件(比如单击onclick事件),如果此对象定义了此事件的处理程序,那么此事件就会调用这个处理程序,如果没有定义此事件处理程序或者事件返回true,那么这个事件会向这个对象的父级对象传播,从里到外,甚至它被处理(父级对象所有同类事件都将被激活),或者它到达了对象层级的最顶层,即document对象(有些浏览器是window).. 二.事件冒泡的作用 事件冒泡允许多个操作被集中处理(把事件处理器添加到一个父级元素上,避免把事件处理器添加到多个子级元

看懂此文,不再困惑于javascript中的事件绑定、事件冒泡、事件捕获和事件执行顺序

最近一个项目基于3维skyline平台,进行javascript二次开发.对skyline事件的设计真是无语至极,不堪折磨啊!抽空学习了下javascript和jquery的事件设计,收获颇大,总结此贴,和大家分享. (一)事件绑定的几种方式 javascript给DOM绑定事件处理函数总的来说有2种方式:在html文档中绑定.在js代码中绑定.下面的方式1.方式2属于在html中绑定事件,方式3.方式4和方式5属于在js代码中绑定事件,其中方法5是最推荐的做法. 方式1: HTML的DOM元素

JavaScript中的事件冒泡?事件传播的解释

注:本文来源  可译网 事件冒泡是你在学习javaScript旅途中遇到的一个术语,它涉及到当一个元素被另一个元素嵌套时调用事件处理的顺序,并且两个元素注册了同一个事件(例如,点击事件). 但是事件冒泡仅仅是难题的一部分.它经常和事件捕获和事件传播一起被提及,并且对这三个概念有着很深的了解是学习javaScript事件必不可少的,例如,假如你想实现事件委托. 在这篇文章中,我会解释这些术语,并展示它们如何组合在一起.我还将向您展示如何对JavaScript事件流的基本了解可以让您对应用程序进行细

DOM事件机制(事件捕获和事件冒泡和事件委托)

内容: 1.事件复习 2.事件冒泡与事件捕获 3.事件委托 1.事件复习 (1)事件 事件是用来处理响应的一个机制,这个响应可以来自于用户(点击, 鼠标移动, 滚动), 也可以来自于浏览器 下面的链接描述了所有事件:https://developer.mozilla.org/en-US/docs/Web/Events (2)事件绑定 事件绑定有3种方法,前两钟方法在这里不介绍,主要看第三种: addEventListener方法(使用事件监听绑定事件) addEventListener: 1 e

JS事件(事件冒泡和事件捕获)

事件流:描述的是在页面中接收事件的顺序 事件冒泡:由最具体的元素接收,然后逐级向上传播至最不具体的元素的节点(文档) 事件捕获:最不具体的节点先接收事件,而最具体的节点应该是最后接收事件 DOM中:用于处理指定和删除事件处理程序的操作addEventListener()和removeEventListener().他们都接收三个参数:要处理的事件名.作为事件处理程序的函数和布尔值(事件处理的时候)[true:事件捕获时;false:事件冒泡时] DOM中的事件对象: type属性 用于获取事件类

小小六的前端学习心得

打算写这篇文章已经好久了,但是文采不行,不知道如何下笔,今天终于鼓起勇气用我拙劣的作文水平来讲述一下这段时间我学习前端开发的心得. 先从我的专业说起.我本人是学计算机的.全名是叫计算机科学与技术(软件方向),学校虽然是一个211学校,学习成绩也还行,但是对于编程这一块,真的是很弱很弱.所以我对计算机编程真正的学习是从实习这段时间开始的.说到这里,我必须得感谢带我进入前端的学长.因为他我才能在今天坐在这里写这篇学习心得. 所以,首先最好是有一个愿意耐心的指导你学习的人,也就是一个好的师傅.他能根据

javascript事件之: 事件冒泡, 事件捕获 ,阻止默认事件

谈起JavaScript的 事件,事件冒泡.事件捕获.阻止默认事件这三个话题,无论是面试还是在平时的工作中,都很难避免. 冒泡篇: 先来看一段实例: js: var $input = document.getElementsByTagName("input")[0]; var $div = document.getElementsByTagName("div")[0]; var $body = document.getElementsByTagName("

javascript中的事件冒泡、事件捕获和事件执行顺序

谈起JavaScript的 事件,事件冒泡.事件捕获.阻止默认事件这三个话题,无论是面试还是在平时的工作中,都很难避免. DOM事件标准定义了两种事件流,这两种事件流有着显著的不同并且可能对你的应用有着相当大的影响.这两种事件流分别是捕获和冒泡.和许多Web技术一样,在它们成为标准之前,Netscape和微软各自不同地实现了它们.Netscape选择实现了捕获事件流,微软则实现了冒泡事件流.幸运的是,W3C决定组合使用这两种方法,并且大多数新浏览器都遵循这两种事件流方式. 1事件传播--冒泡与捕

事件冒泡和事件捕获

1.什么是事件冒泡 在页面上可以有多个事件,也可以多个元素响应同一个事件.假设页面上有两个元素,其中一个元素嵌套在另一个元素里,并且都被绑定了click事件,同时<body>元素也绑定了click事件,完整代码如下: <script> $(function(){ //为span元素绑定click事件 $("span").bind("click",function(){ var txt=$("#msg").html()+&q