你的位置:首页 > 软件开发 > Java > HTML 事件(三) 事件流与事件委托

HTML 事件(三) 事件流与事件委托

发布时间:2016-03-08 10:00:10
本篇主要介绍HTML DOM中的事件流和事件委托。其他事件文章1. HTML 事件(一) 事件的介绍2. HTML 事件(二) 事件的注册与注销3. HTML 事件(三) 事件流与事件委托4. HTML 事件(四) 模拟事件操作[未发布] 目录1. ...

HTML 事件(三) 事件流与事件委托

    本篇主要介绍HTML DOM中的事件流和事件委托。

其他事件文章

1. HTML 事件(一) 事件的介绍

2. HTML 事件(二) 事件的注册与注销

3. HTML 事件(三) 事件流与事件委托

4. HTML 事件(四) 模拟事件操作[未发布]

 

目录

1. 事件流

  1.1 何为事件流

  1.2 事件流的三个阶段

  1.3 addEventListener()注册事件流的阶段

  1.4 阻止事件流的传播

2. 事件委托

  2.1 何为事件委托

  2.2 ul、li场景示例

  2.3 JQuery的事件委托

    2.3.1 delegate()

    2.3.2 on()

 

1. 事件流 (Event Flow)

1.1 何为事件流

简单来说HTML的元素会出现嵌套的关系,比如:一个Div嵌套了一个Button按钮,当2个元素都注册了click点击事件。点击里面的Button按钮时,Div的click事件也会触发。

那么问题来了,既然都会触发,得有个触发的顺序吧?是按照Div → Button这样的顺序触发,还是按照Button → Div的顺序触发?

在之前,两大浏览器厂商网景和微软都有各自的触发顺序:

网景的浏览器采用捕获方式:按照Div → Button这样的顺序触发.

而微软的浏览器采用冒泡方式:按照Button → Div的顺序触发。

在2级DOM事件规范制定时干脆合二为一:事件流同时包含了这2个阶段。

 

1.2 事件流的三个阶段

1.2.1 三个阶段

2级DOM事件规范制定了事件流的三个阶段:捕获阶段目标阶段冒泡阶段

捕获阶段(Capture Phase):事件从最外层的window对象到目标节点的父节点依次触发的阶段。(从外到内)

目标阶段(Target Phase):事件在目标节点上触发时的阶段。

冒泡阶段(Bubbing Phase):事件从目标节点的父节点到最外层的window对象依次触发的阶段。(从内到外)

1.2.2 示例图

 HTML 事件(三) 事件流与事件委托

 

1.3 addEventListener()注册事件流的阶段

元素对象通过addEventListener()注册事件时,此方法的的第三个参数可设置本次注册是捕获阶段还是冒泡阶段。

1.3.1 addEventListener()方法说明

语法:EventTarget.addEventListener(eventName, eventHandler [, useCapture] )

参数

①eventName {string} :所要注册的事件名称,不区分大小写。此名称不需要像注册事件属性那样在前缀加上"on"。如注册鼠标点击事件,写为click。

②eventHandler {function | function Object} :函数或者函数对象。事件触发时所需要执行的函数;当使用函数对象多次注册同一事件时,只当注册一遍。

③useCapture {boolean} 可选 :是否处于捕获阶段,默认为false。

  |-true:当前注册的事件为捕获阶段。

  |-false:当前注册的事件不为捕获阶段,为冒泡阶段。

 

1.3.2 示例

示例使用到Event事件对象的部分属性:

HTML 事件(三) 事件流与事件委托 readonly Object currentTarget :只读,获取正在处理此事件的对象。

HTML 事件(三) 事件流与事件委托 readonly int eventPhase :只读,表示事件的处理阶段:0表示没有正在处理,1表示捕获阶段,2表示目标阶段,3表示冒泡阶段。

HTML 事件(三) 事件流与事件委托 readonly Object target :只读,获取触发此事件的对象。

function clickHandle(e){  console.log("事件阶段:"+e.eventPhase+';target:'+e.target+';currentTarget:'+e.currentTarget)} window.addEventListener('click',clickHandle,false);window.addEventListener('click',clickHandle,true);document.addEventListener('click',clickHandle,false);document.addEventListener('click',clickHandle,true);document.documentElement.addEventListener('click',clickHandle,false);document.documentElement.addEventListener('click',clickHandle,true);document.body.addEventListener('click',clickHandle,false);document.body.addEventListener('click',clickHandle,true);document.getElementById('div').addEventListener('click',clickHandle,false);document.getElementById('div').addEventListener('click',clickHandle,true);document.getElementById('btn').addEventListener('click',clickHandle,false);document.getElementById('btn').addEventListener('click',clickHandle,true);

 

海外公司注册、海外银行开户、跨境平台代入驻、VAT、EPR等知识和在线办理:https://www.xlkjsw.com

原标题:HTML 事件(三) 事件流与事件委托

关键词:HTML

*特别声明:以上内容来自于网络收集,著作权属原作者所有,如有侵权,请联系我们: admin#shaoqun.com (#换成@)。