• JS的事件委托(Event Delegation)


    事件委托(Event Delegation)及其优势和缺点

    🎃 什么是事件委托

    事件委托是一种在JavaScript中处理事件的技术。它利用了事件的冒泡机制,将事件处理程序绑定到它们的共同祖先元素上,而不是直接绑定到每个子元素上。当事件触发时,事件会从子元素一直冒泡到祖先元素,然后通过判断事件的目标元素来执行相应的事件处理程序。

    🎁 优势

    事件委托具有以下优势:

    1. 内存效率:事件委托通过减少事件处理程序的数量,节省内存资源。相比每个子元素都绑定事件处理程序,只需在共同祖先元素上绑定一个事件处理程序即可。

    2. 动态处理:当动态添加或移除子元素时,无需重新绑定和解绑事件处理程序。因为事件处理程序是绑定到祖先元素上的,不受子元素的变化影响。

    3. 简化代码:通过事件委托,可以减少重复的事件绑定代码,简化代码结构。尤其是当有大量子元素需要绑定相同的事件处理程序时,使用事件委托可以显著简化代码。

    4. 动态事件处理:通过判断事件的目标元素,可以根据需要选择执行不同的操作或处理程序。这样可以更灵活地处理事件,并且不需要为每个子元素都编写独立的事件处理程序。

    💔 缺点

    事件委托也有一些缺点需要注意:

    1. 不适用于所有场景:某些需要特定处理的事件,仍需要直接绑定到子元素上,而不适用于委托给祖先元素处理。

    2. 目标元素判断:在事件处理程序中需要正确判断事件的目标元素,以执行相应的操作。如果判断逻辑复杂或错误,可能会导致意外行为。

    3. 不支持所有事件:某些特定的事件(例如focus、blur等)无法在祖先元素上进行委托。

    🌰例子:

    当一个页面中有多个按钮,并且每个按钮都需要绑定点击事件时,可以使用事件委托来简化代码。

    假设我们有以下 HTML 结构:

    <div id="button-container">
      <button class="btn" data-action="action-1">按钮1button>
      <button class="btn" data-action="action-2">按钮2button>
      <button class="btn" data-action="action-3">按钮3button>
      <button class="btn" data-action="action-4">按钮4button>
      
    div>
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7

    我们希望每个按钮被点击时,执行不同的操作。使用事件委托,我们可以将点击事件处理程序绑定到按钮容器上,通过判断点击事件的目标元素(按钮),执行对应的操作。

    const buttonContainer = document.getElementById("button-container");
    
    buttonContainer.addEventListener("click", function(event) {
      if (event.target && event.target.classList.contains("btn")) {
        const action = event.target.getAttribute("data-action");
    
        // 执行对应的操作
        switch (action) {
          case "action-1":
            // 处理按钮1的点击事件
            console.log("点击了按钮1");
            break;
          case "action-2":
            // 处理按钮2的点击事件
            console.log("点击了按钮2");
            break;
          case "action-3":
            // 处理按钮3的点击事件
            console.log("点击了按钮3");
            break;
          case "action-4":
            // 处理按钮4的点击事件
            console.log("点击了按钮4");
            break;
          // 更多按钮的处理...
        }
      }
    });
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28

    通过事件委托,我们只需绑定一个点击事件处理程序到按钮容器上,而不需要为每个按钮都单独绑定事件处理程序。当新的按钮被添加到容器中时,它们也会自动具有相同的点击处理逻辑,无需额外的代码。这样可以大大简化代码,并且方便动态添加或删除按钮时的事件管理。

    🚀 结论

    事件委托是一种处理事件的有效技术,通过将事件处理程序绑定到共同祖先元素上,可以实现优化的事件管理和处理。它在内存效率、动态处理、代码简化和动态事件处理等方面具有优势。

    然而,事件委托并非适用于所有场景,需要在实际使用中权衡利弊。在特定需求下,仍需要直接绑定到子元素上的事件处理程序。同时,在使用事件委托时,需要正确判断事件的目标元素,以避免意外行为的发生。

  • 相关阅读:
    基于element-plus2.5.10 table组件实现分类table
    深度解析RocketMq源码-持久化组件(四) CommitLog
    MyBatis和Hibernate的区别
    Tested采访扎克伯格:揭秘四款VR原型机更多细节
    浅谈电弧光保护在10kV变电站高压室的应用方案
    Channel 是什么?
    帧间预测一些概念
    spark底层为什么选择使用scala语言开发
    realme手机用什么蓝牙耳机好?2022公认音质最好的蓝牙耳机
    掌握PyCharm终端:提升开发效率的命令行艺术
  • 原文地址:https://blog.csdn.net/qq2468103252/article/details/134072412