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

内容:

1.事件复习

2.事件冒泡与事件捕获

3.事件委托

1.事件复习

(1)事件

事件是用来处理响应的一个机制,这个响应可以来自于用户(点击, 鼠标移动, 滚动), 也可以来自于浏览器

下面的链接描述了所有事件:https://developer.mozilla.org/en-US/docs/Web/Events

(2)事件绑定

事件绑定有3种方法,前两钟方法在这里不介绍,主要看第三种:

addEventListener方法(使用事件监听绑定事件)

addEventListener:

1 element.addEventListener(event, function, useCapture)
2 event : (必需)事件名,支持所有 DOM事件 注:事件名要去掉开头的on
3 function:(必需)指定要事件触发时执行的函数
4 useCapture:(可选)指定事件是否在捕获或冒泡阶段执行。true,捕获。false,冒泡。默认false

2.事件冒泡与事件捕获

  • 事件冒泡:从触发事件的那个节点一直到document,是自下而上的去触发事件
  • 事件捕获:指从document到触发事件的那个节点,即自上而下的去触发事件
  • 事件委托:利用了事件冒泡的原理
  • 补充:绑定事件方法(addEventListener)的第三个参数,就是控制事件触发顺序是否为事件捕获。true,事件捕获;false,事件冒泡。默认false,即事件冒泡。该参数默认为false,当对一个dom节点触发事件时,若外层的节点也设置了相应的事件函数,就会使外层的节点也触发自己的事件函数,而如果设置该参数为true,当对一个dom节点触发事件时,将从最外层开始触发事件而不是从这个dom节点开始!

阻止事件冒泡:event.cancelBubble = true

事件冒泡实例:

 1 <!DOCTYPE html>
 2 <html>
 3 <head>
 4     <meta charset="utf-8">
 5     <title>事件冒泡和事件捕获</title>
 6     <style>
 7         #id1 {
 8             background: lightblue;
 9             padding: 20px;
10         }
11         #id2 {
12             background: lightyellow;
13             padding: 20px;
14         }
15     </style>
16 </head>
17 <body>
18 <div id=‘id1‘>
19     <div id="id2">
20         <button id=‘id3‘>id3 按钮</button>
21     </div>
22 </div>
23 <script>
24     var id1 = document.querySelector(‘#id1‘);
25     var id2 = document.querySelector(‘#id2‘);
26     var id3 = document.querySelector(‘#id3‘);
27     // 事件冒泡:
28     id1.addEventListener(‘click‘, function(event){
29         console.log(‘click id1‘, event)
30     });
31     id2.addEventListener(‘click‘, function(event){
32         console.log(‘click id2‘, event)
33     });
34     id3.addEventListener(‘click‘, function(event){
35         console.log(‘click id3‘, event)
36
37         // 阻止事件冒泡
38         // event.cancelBubble = true
39     });
40 </script>
41 </body>
42 </html>

事件捕获实例:

 1 <!DOCTYPE html>
 2 <html>
 3 <head>
 4     <meta charset="utf-8">
 5     <title>事件冒泡和事件捕获</title>
 6     <style>
 7         #id1 {
 8             background: lightblue;
 9             padding: 20px;
10         }
11         #id2 {
12             background: lightyellow;
13             padding: 20px;
14         }
15     </style>
16 </head>
17 <body>
18 <div id=‘id1‘>
19     <div id="id2">
20         <button id=‘id3‘>id3 按钮</button>
21     </div>
22 </div>
23 <script>
24     var id1 = document.querySelector(‘#id1‘);
25     var id2 = document.querySelector(‘#id2‘);
26     var id3 = document.querySelector(‘#id3‘);
27
28     // 事件捕获:
29     // addEventListener 的第三个参数 useCapture 设置为true
30     id1.addEventListener(‘click‘, function(event){
31         console.log(‘capture click id1‘, event)
32     }, true);
33     id2.addEventListener(‘click‘, function(event){
34         console.log(‘capture click id2‘, event)
35     }, true);
36     id3.addEventListener(‘click‘, function(event){
37         console.log(‘capture click id3‘, event)
38     }, true);
39 </script>
40 </body>
41 </html>

3.事件委托

 1 事件委托相关概念
 2 ===
 3
 4 在前端中一些元素是动态添加的
 5 对于这样的元素, 我们没办法实现绑定事件
 6 我们可以把 click 事件绑定在事先存在的父元素上
 7 通过父元素响应click事件 调用相应的事件响应函数
 8 而事件响应函数会被传入一个参数, 就是事件本身
 9 然后在运行的时候通过 event.target 属性(发起事件的元素,例如某个按钮)
10 来检查被点击的对象是否是需要的对象, 这个概念就是事件委托

原文地址:https://www.cnblogs.com/wyb666/p/9383161.html

时间: 2025-01-31 10:33:42

DOM事件机制(事件捕获和事件冒泡和事件委托)的相关文章

深入理解DOM事件机制系列第三篇——事件对象

× 目录 [1]获取 [2]事件类型 [3]事件目标[4]事件代理[5]事件冒泡[6]事件流[7]默认行为 前面的话 在触发DOM上的某个事件时,会产生一个事件对象event,这个对象中包含着所有与事件有关的信息.所有浏览器都支持event对象,但支持方式不同.本文将详细介绍事件对象 获取事件对象 [1]一般地,event对象是事件程序的第一个参数 [注意]IE8-浏览器不支持 //IE8-浏览器输出undefined,其他浏览器则输出事件对象[object MouseEvent] <div i

事件对象、事件冒泡、事件捕获

事件对象:                    event:描述或者包含事件的更加详细的信息;                    event:不兼容FF;                    ev: 兼容IE9+,FF,Chrome,IE8--报undefined;                    兼容写法:var oEvent=ev||event;                    clientX:X轴的坐标                    clientY:Y轴的坐标

javascript事件机制了解与深入

一.事件的捕获与冒泡 “DOM2级事件”规定的事件流包括三个阶段:事件捕获阶段.处于目标阶段和事件冒泡阶段.下面这个图能够很形象的解释(理解捕获和冒泡必不可少的图) 按照图我们编写了代码去验证下, <div id="parent"> <div id="child"> child </div> </div> <script type="text/javascript"> var p = d

[解惑]JavaScript事件机制

[解惑]JavaScript事件机制 初学 JS 的童鞋经常会有诸多疑问,我在很多 QQ 群也混了好几年了,耳濡目染也也收获了不少,以后会总结下问题的结论,顺便说说相关知识的扩展~ 如果贸然回答还会冒泡,这不太好的,稍微严谨点考虑 0级 DOM 事件模型的话,这个答案是否定的.但是在 2级 DOM 事件模型中,答案是肯定的,这个问题值得探讨记录下. 本文地址:http://www.cnblogs.com/hustskyking/p/problem-javascript-event.html 一.

javascript的事件冒泡,阻止事件冒泡和事件委托, 事件委托是事件冒泡的一个应用。

首先,弄明白js 当中,什么是事件,事件模型在js中是如何设计的.什么是事件冒泡? 什么是“事件冒泡”呢?假设这里有一杯水,水被用某种神奇的方式分成不同颜色的几层.这时,从最底层冒出了一个气泡,气泡会一层一层地上升,直到最顶层.而你不管在水的哪一层观察都可以看到并捕捉到这个气泡.好了,把“水”改成“DOM”,把“气泡”改成“事件”.这就是“事件冒泡” 什么是事件委托呢?event delegation : 地址:http://davidwalsh.name/event-delegate One

JavaScript系列----事件机制

1.事件流 1.1.标准事件流 所谓的标准事件流指的的:EMCAScript标准规定事件流包含三个阶段,分别为事件捕获阶段,处于目标阶段,事件冒泡阶段. 下面是一段html代码,根据代码来说明标准事件流. <!DOCTYPE HTML> <html> <body> <div> <button>click</button> </div> </body> </html> 在上面的代码中,如果点击按钮bu

Aa3.0 事件机制

说明:本文由多处网络文章整理而成,在此未一一注明原文链接,敬请谅解! AS3:事件流机制 事件流 只要发生事件,Flash Player就会调度该事件对象. 如果事件目标不在显示列表中,则Flash Player将事件对象直接调度到事件目标. 如果事件目标在显示列表中,则Flash Player将事件对象调度到显示列表,然后该事件对象将在显示列表中进行一次从舞台到“目标节点”的往返行程. 事件流说明事件对象如何在显示列表中穿行,分为三部分: 第一部分称为捕获阶段,该阶段包括从舞台到目标节点的父节

React事件机制-事件分发

事件分发 之前讲述了事件如何绑定在document上,那么具体事件触发的时候是如何分发到具体的监听者呢?我们接着上次注册的事件代理看.当我点击update counter按钮时,触发注册的click事件代理. function dispatchInteractiveEvent(topLevelType, nativeEvent) { interactiveUpdates(dispatchEvent, topLevelType, nativeEvent); } function interacti

iOS事件机制(二)

iOS事件机制(二) DEC 29TH, 2013 本篇内容接上一篇iOS事件机制(一),本次主要介绍iOS事件中的多点触控事件和手势事件. 从上一篇的内容我们知道,在iOS中一个事件用一个UIEvent对象表示,UITouch用来表示一次对屏幕的操作动作,由多个UITouch对象构成了一个UIEvent对象.另外,UIResponder是所有响应者的父类,UIView.UIViewController.UIWindow.UIApplication都直接或间接的集成了UIResponder.关于

js的事件机制二

js的事件机制二 1.给合适的HTML标签添加合适的事件 onchange-----select下拉框 onload-----body标签 单双击-----用户会进行点击动作的HTML元素 鼠标事件 ---用户会进行鼠标移动的操作的 键盘事件----用户会进行键盘操作的HTML元素 2.给HTML添加多个事件时,注意事件的冲突 举个例子:单击和双击 当事件的触发条件包含相同部分时候,会产生事件之间的冲突. 3.事件的阻断 当事件所监听的函数的将返回值返回给事件时 false:则会阻断当前所在HT