首页 > 其他分享 >js事件冒泡和事件委托

js事件冒泡和事件委托

时间:2024-09-08 15:48:33浏览次数:6  
标签:委托 代码 元素 next 事件 js 冒泡

事件冒泡是指当一个元素上的事件被触发时,事件会从最内层的目标元素开始,逐级向上传播到父级元素,直到到达最顶层的祖先元素(通常是 document 对象)。这是一种默认的事件传播方式。

示例

html复制代码<div id="parent">
  <button id="child">Click me</button>
</div>
javascript复制代码const parent = document.getElementById('parent');
const child = document.getElementById('child');

parent.addEventListener('click', () => {
  console.log('Parent clicked');
});

child.addEventListener('click', () => {
  console.log('Child clicked');
});

执行结果

  1. 点击 child 按钮时,会先输出 "Child clicked",然后输出 "Parent clicked"。这就是事件冒泡的效果。

事件委托(Event Delegation)

事件委托是利用事件冒泡的特性,将一个事件处理程序添加到父元素上,而不是给每个子元素分别添加事件处理程序。当事件发生时,事件处理程序会检查事件的目标元素,并对特定的子元素进行处理。事件委托可以有效减少内存消耗,提高性能,尤其是在处理大量动态子元素时。

示例

html复制代码<ul id="list">
  <li>Item 1</li>
  <li>Item 2</li>
  <li>Item 3</li>
</ul>
javascript复制代码const list = document.getElementById('list');

list.addEventListener('click', (event) => {
  if (event.target.tagName === 'LI') {
      console.log(`Clicked on ${event.target.textContent}`);
  }
});

执行结果

  1. 无论点击 list 内的哪个 li 元素,都会触发 list 上的点击事件处理程序,并且只对点击的 li 元素进行处理。

主要区别

  1. 定义

    • 事件冒泡:是事件传播的一种方式,事件从目标元素向上传播到祖先元素。

    • 事件委托:是一种编程技巧,通过事件冒泡机制,将事件处理程序添加到父元素上,利用事件目标来处理特定的子元素。

  2. 目的

    • 事件冒泡:描述事件传播的机制。

    • 事件委托:优化事件处理,减少内存消耗,尤其适用于处理大量动态生成的子元素。

  3. 用法

    • 事件冒泡:是浏览器事件模型的一部分,自动发生。

    • 事件委托:是开发者通过编程实现的技巧,利用事件冒泡机制来简化事件处理。

事件委托的优点

  • 性能优化:减少需要绑定的事件处理程序的数量,降低内存消耗。

  • 动态元素处理:方便处理动态添加或删除的子元素的事件。

  • 简化代码:减少重复代码,使代码更加简洁和易于维护。

事件委托的缺点

  • 限制:不适用于不支持冒泡的事件(如 blurfocus 事件)。

  • 复杂度:需要手动检查事件目标,增加了代码的复杂度。

总结

  • 事件冒泡是事件传播机制的一部分,描述了事件从目标元素向上传播的过程。

  • 事件委托是一种编程技巧,利用事件冒泡机制,通过在父元素上绑定事件处理程序来处理子元素的事件。

 

 

用链表实现两数相加

在链表中实现两数相加的一个经典问题就是在两个链表中,每个节点代表一个数字的位,两个链表代表两个非负整数。数字以逆序存储,每个节点包含一个数字。将两个数相加并返回一个新的链表表示结果。

javascript复制代码class ListNode {
  constructor(val = 0, next = null) {
      this.val = val;
      this.next = next;
  }
}

function addTwoNumbers(l1, l2) {
  let dummy = new ListNode();
  let current = dummy;
  let carry = 0;

  while (l1 !== null || l2 !== null) {
      let sum = carry;

      if (l1 !== null) {
          sum += l1.val;
          l1 = l1.next;
      }

      if (l2 !== null) {
          sum += l2.val;
          l2 = l2.next;
      }

      carry = Math.floor(sum / 10);
      current.next = new ListNode(sum % 10);
      current = current.next;
  }

  if (carry > 0) {
      current.next = new ListNode(carry);
  }

  return dummy.next;
}

项目中的难点问题

  1. 状态管理:在使用 Redux 时,如何高效地管理复杂的状态树,并确保组件间状态的一致性和数据流的合理性。

  2. 实时数据更新:实现 WebSocket 来进行实时数据传输,确保数据能够及时、准确地反映在前端页面上。

  3. 组件复用:设计可复用的组件,以减少重复代码,提高开发效率和维护性。

  4. 性能优化:对 React/Vue 组件进行性能优化,如避免不必要的重新渲染、懒加载等。

  5. 跨组件通信:在 Vue 和 React 中,如何优雅地进行跨组件通信,比如在深层嵌套的组件中传递数据。

  6.  

标签:委托,代码,元素,next,事件,js,冒泡
From: https://www.cnblogs.com/itzhijia/p/18402938

相关文章

  • Vue.js入门系列(二十三):集成第三方动画库、总结过渡与动画、配置代理
    个人名片......
  • Vue.js入门系列(二十二):Vue的`$nextTick`、动画效果与过渡效果
    个人名片......
  • JS解密工具之如何续期 Charles 的 SSL 证书
    本文由jsjiami加密/一键JS解密独家赞助有问题请私聊加密官方客服Charles是一款常用的HTTP代理工具,用于调试网络请求。然而,Charles的SSL证书会定期过期,如果SSL证书失效,你将无法对HTTPS请求进行抓包。本文将详细讲解如何续期Charles的SSL证书,并附上详细步骤图。1.......
  • 阅读周·深入浅出的Node.js | 异步I/O、事件驱动和单线程,Node基调三元素了解一下
    背景去年下半年,我在微信书架里加入了许多技术书籍,各种类别的都有,断断续续的读了一部分。没有计划的阅读,收效甚微。新年伊始,我准备尝试一下其他方式,比如阅读周。每月抽出1~2个非连续周,完整阅读一本书籍。这个“玩法”虽然常见且板正,但是有效。已读完书籍:《架构简洁之道》。当前阅读......
  • Vue 多个服务的路由配置 在 vue.config.js 里面怎么写
    在Vue项目的vue.config.js文件中,你不能直接配置路由服务,因为这个文件主要用于配置Webpack和开发服务器等项目设置。路由配置通常是在Vue项目的代码中设置的,例如在router/index.js文件中。不过,如果你需要配置多个服务(即不同的API服务或代理服务),你可以在vue.config.js......
  • 研发管理过程案例分析-不文明文字短信事件
    背景     测试工程师因为项目没有部署测试环境,在生产环境编写测试短信,因为测试测试时使用了真实手机号码,使用了不文明测试文字短信发送到客户手机上。最终造成不良影响。对于这个事件责任判定应该是如何?除了测试工程师有主要责任,技术负责人有责任吗?项目经理有责任吗?责任判......
  • 基于nodejs+vue动漫论坛[程序+论文+开题] 计算机毕业设计
    本系统(程序+源码+数据库+调试部署+开发环境)带文档lw万字以上,文末可获取源码系统程序文件列表开题报告内容研究背景随着互联网技术的飞速发展,动漫文化作为一种全球化的流行文化现象,在全球范围内吸引了大量忠实粉丝。动漫论坛作为动漫爱好者交流思想、分享作品、探讨剧情的......
  • 基于nodejs+vue动漫模型仓储管理系统[程序+论文+开题] 计算机毕业设计
    本系统(程序+源码+数据库+调试部署+开发环境)带文档lw万字以上,文末可获取源码系统程序文件列表开题报告内容研究背景随着动漫产业的蓬勃发展,动漫模型作为该领域的重要衍生品,其市场需求日益增长。动漫模型种类繁多,从精致的手办到复杂的场景模型,每一款都承载着粉丝的热情与期......
  • Vue2 - 详细实现聊天室IM即时通讯及聊天界面,支持发送图片视频、消息已读未读等,集成mqt
    前言如果您需要Vue3版本,请访问在vue2|nuxt2项目开发中,详解手机移动端H5网页在线1v1聊天功能(仿腾讯云IM功能),技术栈为MQTT通讯协议+后端Node服务端+数据库设计+vue前端聊天界面,超详细前后端完整流程及示例源代码,vue2聊天即时通讯IM实时接收和发送消息,可发送文字、图......
  • nodejs 返回静态资源
    nodejs返回资源时,依照index.js文件的目录为基准。例如,index.js存放目录为/web/index.js 模板文件中的静态资源存放在./static/main.css那么静态资源的实际存放目录就是/web/static/main.css.这个文件夹要和index.js在同一个目录下才可以。 nodejs返回css无效当nodejs......