js中的事件委托

文章类型:Javascript

发布者:hp

发布时间:2023-03-25

一:事件流

一个完整的事件流包含事件捕获阶段>事件目标阶段>事件冒泡阶段,主要分为捕获和冒泡事件流

1):捕获事件流=>从根节点开始执行,一直往子节点查找执行,直到查找执行到目标节点

2):冒泡事件流=>从目标节点开始执行,一直往父节点冒泡查找执行,直到查到到根节点


二:事件委托


(一):定义

利用事件冒泡,只指定一个事件处理程序,就可以管理某一类型的所有事件


(二):原理

利用事件冒泡,就是事件从最深的节点开始,然后逐步向上传播事件

分为三个阶段

1):捕获阶段,从window对象自上而下向目标节点传播的阶段,不具体的节点先接收事件,然后逐级向下传播,最具体的节点最后接收到事件

2):目标阶段,真正的目标节点正在处理事件的阶段,表示事件刚好传播到用户产生行为的元素上,可能是事件捕获的最后一个阶段,也可能是事件冒泡的第一个阶段

3):起泡阶段,从目标节点自下而上向window对象传播的阶段,是最具体的元素先接收事件,然后逐级向上传播,不具体的节点最后接收事件


(三):实现

<ul id="myLinks"> 
 <li id="goSomewhere">Go somewhere</li> 
 <li id="doSomething">Do something</li>
   <li id="sayHi">Say hi</li>
   </ul>
   let list = document.getElementById("myLinks");
   list.addEventListener("click", (event) => {  let target = event.target;});


(四):作用和优点

1):事件委托主要用来减少内存消耗,不用处理多次循环绑定

2):动态绑定事件,随时可用

3):冒泡、委托对事件连环触发带来的影响

4):替代原生JS中循环绑定事件的操作,节省时间


(五):总结

1):适合用事件委托的事件:click,mousedown,mouseup,keydown,keyup,keypress


三:事件(Event)

1):target属性在事件目标阶段,为真实操作的目标元素。

2): currentTarget属性在事件捕获、事件目标、事件冒泡这3个阶段

3):stopPropagation()函数仅会阻止事件冒泡,其他事件处理程序仍然可以调用

4):stopImmediatePropagation()函数不仅会阻止冒泡,也会阻止其他事件处理程序的调用

5):event.preventDefault()阻止默认元素行为