JS 事件委托

这篇具有很好参考价值的文章主要介绍了JS 事件委托。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

JavaScript事件委托(Event delegation)又叫事件代理,是一种在父元素上监听事件,然后通过事件冒泡机制来处理子元素的事件的技术。通过事件委托,可以避免为每个子元素都绑定事件处理程序,提高性能并简化代码。

事件委托的基本原理是将事件处理程序绑定在父元素上,然后通过事件冒泡捕获到子元素的事件触发。这样,无论子元素是现有的还是动态生成的,它们的事件都会被父元素捕获并处理。

JS 事件委托
事件捕获和事件冒泡示例图
<!DOCTYPE html>
<html>
<head>
  <title>事件委托示例</title>
</head>
<body>
  <ul id="list">
    <li>项目1</li>
    <li>项目2</li>
    <li>项目3</li>
    <li>项目4</li>
  </ul>

  <script>
    // 获取父元素
    var list = document.getElementById('list');

    // 添加点击事件监听器到父元素
    list.addEventListener('click', function(event) {
      // 检查目标元素是否是列表项
      if (event.target.tagName === 'LI') {
        // 在控制台输出被点击的列表项的文本内容
        console.log(event.target.textContent)
      }
    })
  </script>
</body>
</html>

一、事件捕获

事件捕获(Event Capturing)是事件传播的一种阶段,它是事件冒泡的前置阶段。在事件捕获阶段,事件从最外层的祖先元素开始,逐级向下传播,直到达到目标元素。

二、事件冒泡

事件冒泡(Event Bubbling)是指在前端网页开发中,当一个元素上的事件被触发时,如果该元素上有注册该事件的处理程序,那么这个事件会沿着元素的层次结构向上冒泡,依次触发父元素的同一事件。

当某个元素上发生了一个事件,比如点击(click)事件,首先会执行该元素自身绑定的事件处理函数,然后这个事件会向上冒泡,触发父元素上绑定的相同事件处理函数。如果父元素也有父元素,那么事件会继续向上冒泡,依次触发更高层级的父元素上的事件处理函数,直到冒泡到文档的根元素(通常是 <html>元素)为止。

事件冒泡是浏览器默认的事件传播方式,但可以通过调用事件对象的 stopPropagation() 方法来停止事件的冒泡,阻止事件继续传播到上层元素。

三、为什么要使用事件委托

JavaScript中,页面内事件处理程序的个数会直接影响页面的整体性能,因为每个事件处理程序都是对象,对象会占用内存,内存中的对象越多,页面的性能则越差。事件委托技术可以避免对每个子元素添加事件监听器,减少操作DOM节点的次数,从而减少浏览器的重绘和重排,提高代码的性能。

四、事件委托实现原理

事件委托的实现原理是基于事件冒泡机制。当一个元素上发生了某个事件(如点击事件),事件会从触发元素开始向上冒泡,直到根节点。事件委托利用了事件冒泡的特性,将事件处理程序绑定在父元素上,通过事件冒泡捕获子元素的事件。

以下是事件委托的实现原理步骤:

1.给父元素绑定事件  
2.给父元素定义事件,监听子元素的冒泡事件 
3.找到是哪个子元素的事件,通过匿名回调函数的参数e用来接收事件对象,通过target获取触发事件的目标文章来源地址https://www.toymoban.com/news/detail-505933.html

五、事件委托的优缺点

优点 缺点
减少内存消耗 事件处理逻辑可能变得复杂
支持动态元素 不适用于捕获阶段的事件
提高性能 事件冒泡可能导致事件处理不准确
简化代码结构 需要合理选择合适的父元素
支持事件冒泡机制 某些事件无法冒泡(如滚动事件等)
提供统一的事件处理逻辑 事件委托的性能提升可能不明显,取决于具体情况

到了这里,关于JS 事件委托的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • Unity 委托 (Delegate) 的简单理解以及实现

    委托相当于把某一个方法当成参数,当执行委托的时候就相当于执行了方法,所以这个方法必须和委托具有相同的参数类型. 委托的简单实现   输出的结果 多播:委托对象可使用 \\\"+\\\" 运算符进行合并。一个合并委托调用它所合并的两个委托。只有相同类型的委托可被合并。\\\"-\\\" 运算

    2024年02月16日
    浏览(32)
  • 理解C#委托(Delegate)通俗易懂,深入浅出

    委托首先是一个数据类型,我们可以像定义结构体一样定义一个委托类型,委托(Delegate) 是存有对某个方法的引用的一种引用类型变量。引用可在运行时被改变 委托的定义 例如: 在定义委托类型时要指定函数的参数类型和返回值,一旦声明了委托类型,委托对象必须使用

    2024年02月02日
    浏览(35)
  • JS 之 事件Event对象详解(属性、方法、自定义事件)

    一、Event对象 1、简介 ​ 事件 event 对象是指在浏览器中触发事件时,浏览器会自动创建一个 event 对象,其中存储了本次事件相关的信息,包括事件类型、事件目标、触发元素等等。浏览器创建完 event 对象之后,会自动将该对象作为参数传递给绑定的事件处理函数,我们可以

    2024年02月09日
    浏览(56)
  • 【unity小技巧】委托(Delegate)的基础使用和介绍

    在Unity中,委托( Delegate )是一种用于处理方法回调的特殊类型。它允许您将方法作为参数传递给其他方法,并在需要时调用这些方法。 委托在游戏开发中非常有用࿰

    2024年02月15日
    浏览(35)
  • 在JavaScript中,什么是浏览器事件循环(browser event loop)?

    前端入门之旅:探索Web开发的奇妙世界 记得点击上方或者右侧链接订阅本专栏哦 几何带你启航前端之旅 欢迎来到前端入门之旅!这个专栏是为那些对Web开发感兴趣、刚刚踏入前端领域的朋友们量身打造的。无论你是完全的新手还是有一些基础的开发者,这里都将为你提供一

    2024年02月07日
    浏览(44)
  • UE4/5C++:Delegate(委托or代理?)的使用

    目录 DECLARE的使用 单播: 绑定UObject 绑定 调用 无参调用 解除绑定: 绑定Lambda表达式: 绑定c++原生的c++类的函数: 绑定共享指针: 绑定静态函数: 绑定线程安全的共享指针: 绑定一个Function方法: 多播 动态单播代理:  用在蓝图上: 在c++中如何绑定:  动态多播代理  

    2024年02月07日
    浏览(32)
  • Web.3js监听智能合约事件event

    在前端页面调用合约写入数据时不会立即返回结果,这时需要再调用获取数据的函数,使用起来非常不便,这时event就可以很好解决这样的问题。 合约代码: 声明event事件: event Deposit(address indexed _from, bytes32 indexed _id, uint _value); 触发event事件: emit Deposit(msg.sender, _id, msg.valu

    2024年02月11日
    浏览(45)
  • unity: C#的Action Event Delegate的异同

    目录 一、Action 二、Event 三、Action和Event区别: 四、Delegate 总结:Action Event Delegate的异同 前言: Action、Event和Delegate都是C#语言中的重要概念,分别用于管理函数指针,并且在某些情况下可以实现相同的目标。 Action是一种函数指针类型,它指向一个没有参数和返回值的函数。

    2024年02月12日
    浏览(26)
  • 一文带你彻底弄懂js事件循环(Event Loop)

    JavaScript事件循环是JavaScript运行时环境中处理异步操作的机制。它允许JavaScript在执行同步代码的同时处理异步任务,以避免阻塞线程并提供更好的用户体验。 本文将在浏览器异步执行原理基础上带你彻底弄懂js的事件循环机制。 js是单线程的,也就是说同一时刻只能做一件事

    2024年02月08日
    浏览(38)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包