首页 > event事件

event事件

10.2.6 事件传播

当事件目标是Window对象或其他一些单独对象(比如XMLHttpRequest)时,浏览器会简单的通过调用对象上适当的处理程序响应事件。

 

在调用在目标元素上注册的事件处理函数后,大部分事件会“冒泡”到DOM树根。

 

 发生在文档元素上的大部分事件都会冒泡,但有些例外,比如focus、blur和scroll事件。文档元素上的load事件会冒泡,但它会在Document对象上停止冒泡而不会传播到Window对象。只有当整个文档都加载完毕时才会触发window对象的load事件。

 

当事件目标是文档或文档元素时,它会在不同的DOM节点之间传播(propagation)。

分为三个阶段:

 

  • 捕获阶段(capture phase):从window对象传导到目标对象。(window--document--....--目标对象)
  • 目标阶段(target phase):目标对象本身的事件处理程序调用。
  • 冒泡阶段(bubbling phase):从目标对象传导回window对象。(目标对象--父元素--....--document--window)

 

事件代理(事件委托)

基于事件会在冒泡阶段向上传播到父节点,我们可以将子节点的监听事件定义在父节点上,由父节点的监听函数统一处理多个子元素的事件。这种方法叫做事件的代理(delegation)。

"div">   

 

"item">123
  

 

document.getElementById('div').addEventListener('click', function(e) {   

  var target = e.target;   

  if(target.getAttribute('id').toLowerCase() == 'item') {   

    alert(1);   

  }   

});

如果使用事件代理,以后插入的新节点仍然可以监听的到。

 

如果使用JQuery,我们要为新增节点添加事件,除了在新增事件后添加事件外,还可以用下面的代码:

$(document).on('click','div',function(){})

这种方式其实就是使用了事件代理。

 

10.2.7 事件取消

用属性注册的世界处理程序的返回值能用于取消事件的浏览器默认操作。在支持addEventListener()的浏览器中,也能通过调用事件对象的preventDefault()方法取消事件的默认操作。

在IE9之前的IE中,可以通过设置事件对象的returnValue属性为false来达到同样的效果。

function cancelHandler(event){

  var event = event || window.event;

  if(event.preventDefault) {event.preventDefault();}  //标准

  if(event.returnValue) { event.returnValue = false;}  // IE

  return false; //用于处理使用对象属性注册的处理程序

}

 

Event对象提供了一个属性defaultPrevented,返回一个布尔值,默认false,表示该事件是否调用过preventDefault方法。

 

取消事件传播

在支持addEventListener()的浏览器中,可以调用事件对象的一个stopPropagation()方法以阻止事件的继续传播。

e.stopPropagation()

//IE

e.cancelBubble = true;

 

在Event对象上还有一个方法stopImmediatePropagation(),阻止同一个事件的其他监听函数被调用。也就是说,如果同一个节点对于同一个事件指定了多个监听函数,这些函数会根据添加的顺序依次调用。只要其中有一个监听函数调用了stopImmediatePropagation方法,其他的监听函数就不会再执行了。

e.addEventListener('click',function(event){

  event.stopImmediatePropagation();

});

e.addEventListener('click',function(event){   

  //不会触发

});

 

著作权归作者所有。

商业转载请联系作者获得授权,非商业转载请注明出处。

原文: http://ghmagical.com/article/page/id/nXCnaSLsuyWd © ghmagical.com

转载于:https://www.cnblogs.com/y-lin/p/6404937.html

更多相关:

  • addEventListener()与removeEventListener()用于处理指定和删除事件处理程序操作。所有的DOM节点中都包含这两种方法,并且它们都接受3个参数:要处理的事件名、作为事件处理程序的函数和一个布尔值。最后这个布尔值参数是true,表示在捕获阶段调用事件处理程序;如果是false,表示在冒泡阶段调用事件处理...

  • 有时候当我们单纯的看 Laravel 手册的时候会有一些疑惑,比如说系统服务下的授权和事件,这些功能服务的应用场景是什么,其实如果没有经历过一定的开发经验有这些疑惑是很正常的事情,但是当我们在工作中多加思考会发现有时候这些服务其实我们一直都见过。下面就事件、事件监听举一个很简单的例子你就会发现。 ​ 这个例子是关于文章的浏览数的实现,...

  • 1、点击元素,获取绑定该事件的父级元素,使用 e.currentTarget。e.target 获取的是,出发该事件的元素,该元素有可能是所绑定事件的元素的子元素。    2、使用 react router4   history 只能传递给儿子组件,不能传递给孙子组件   如果孙子组件需要,可以通过 props 传递过去    3、关...

  • 1. preventDefault:    比如百度,这是html中最基础的东西,起的作用就是点击百度链接到http://www.baidu.com,这是属于标签的默认行为;preventDefault方法就是可以阻止它的默认行为的发生而发生其他的事情;...

  • Vue组件使用v-on绑定自定义事件:   可以分为3步理解:     1.在组件模板中按照正常事件机制绑定事件:       template: '',       如上,v-on:click就是用来给子组件绑定点击事件的,这就...

  • 点云PCL免费知识星球,点云论文速读。文章:DSP-SLAM: Object Oriented SLAM with Deep Shape Priors作者:Jingwen Wang Martin Runz Lourdes Agapito编译:点云PCL代码:https://github.com/JingwenWang95/DSP-S...

  • RAM缓存 新RAM缓存算法(CLFUS) 新的RAM缓存使用的创意来自许多缓存替换策略和算法,包括LRU,LFU,CLOCK,GDFS及2Q,它被命名为时钟周期内最小频繁使用大小算法CLFUS(Clocked Least Frequently Used by Size)。它避开了任何专利算法,具有如下特性: 均衡最近性(Rec...

  • MP4 |视频:AVC,1280×720 30 fps |音频:AAC,48 KHz,2 Ch |时长:2h 12m 语言:英语+中英文字幕(根据原英文字幕机译更准确)|大小解压后:560M C4D是一个有抱负的运动图形艺术家和设计师的重要工具。借助C4D,您可以使用3D对象、动态效果和动画来增强运动图形、模型和可视化效果。本课...

  • 文章目录先说问题:再说解决尝试1:尝试2(该尝试建议先在自己环境搭配对应业务测试通过后再现场尝试): 感谢 学无止境996同学的陪伴和vigourtyy美丽女友的支持,直到这个解决问题的深夜 先说问题: ceph 12.2.1生产环境:3副本 tier + 3副本data 机房在拥有业务的情况下重启集群交换机,产生如下场景...

  • 这周主要学习了java中的类和对象的知识点,发现和C++中的类和对象极为相似,对于类和对象的概念理解起来也简单。同时在自学的过程中也把类的知识重新复习巩固了一下(如类的三大特征:继承,封装和多态,构造,成员对象的访问权限,构造,无参有参函数的调用等),同时也了解到一些新的概念,比如类对象创建和引用占据堆内存和栈内存,输出对象时默认调...

  • 点云PCL免费知识星球,点云论文速读。 标题:MoreFusion: Multi-object Reasoning for 6D Pose Estimation from Volumetric Fusion 作者:Kentaro Wada, Edgar Sucar, Stephen James 星球ID:wl_华科_点云处理_目...

  • (1)跟踪器的建立:对新产生的目标,且宽(高)大于5时,建立跟踪器 (2)Kalman滤波:用Kalman滤波器对目标当前的方位、大小做出预测   目标特征矢量采用(x, y, dx, dy, w, h)六维矢量,观测矢量为(x, y, w, h)    系统状态转移矩阵:                      1, 0, 0, ...