js事件委托

浏览器处理DOM事件的过程

对于事件的捕获和处理,不同的浏览器厂商有不同的处理机制,这里我们主要介绍W3C对DOM2.0定义的标准事件。

DOM2.0模型将事件处理流程分为三个阶段:
1.事件捕获:当某个元素触发某个事件(如onclick),顶层对象document就会发出一个事件流,随着DOM树的节点向目标元素节点流去,直到到达事件真正发生的目标元素。在这个过程中,事件相应的监听函数是不会被触发的。

2.事件目标:当到达目标元素之后,执行目标元素该事件相应的处理函数。如果没有绑定监听函数,那就不执行。

3.事件冒泡:从目标元素开始,往顶层元素传播。途中如果有节点绑定了相应的事件处理函数,这些函数都会被一次触发。如果想阻止事件起泡,可以使用e.stopPropagation()(Firefox)或者e.cancelBubble=true(IE)来组织事件的冒泡传播。
如图:
这里写图片描述

js事件委托/代理

实际上指的是利用js冒泡机制,当事件抛到目标节点的父节点时,通过检查事件的目标对象(target)来判断并获取事件源。
如在ul下所有li添加点击事件
代码如下

1
2
3
4
5
6
7
8
// 获取父节点,并为它添加一个click事件
document.getElementById("ul-parent").addEventListener("click",function(e) {
// 检查事件源e.targe是否为Li
if(e.target && e.target.nodeName.toUpperCase == "LI") {
// 真正的处理过程在这里
console.log("Children li"+ e.target.id + " was clicked!");
}
});

本文标题:js事件委托

文章作者:Coding_youth

发布时间:2017年09月30日 - 10:09

最后更新:2020年05月28日 - 19:05

原始链接:https://yangchendoit.github.io/2017/09/30/js事件委托/

许可协议: 署名-非商业性使用-禁止演绎 4.0 国际 转载请保留原文链接及作者。

坚持原创技术分享,您的支持将鼓励我继续创作!