ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

关于事件委托

2022-07-30 18:02:40  阅读:143  来源: 互联网

标签:委托 关于 代理 li 冒泡 click 事件


1. 概念

事件委托也叫事件代理 , JavaScript 事件代理则是一种简单的技巧,通过它你可以把事件处理器添加到一个上级元 素上,这样就避免了把事件处理器添加到多个子级元素上。当我们需要对很多元素添加事 件 的时候,可以通过将事件添加到它们的上级元素而将事件委托给上级元素来触发处理函 数。这主要得益于浏览器的事件冒泡机制。事件代理用到了两个在 JavaSciprt 事件中常被 忽 略的特性:事件冒泡以及目标元素。

2. 例子

比如有如下html 结构:

  <ul>       <li>1</li>       <li>2</li>       <li>3</li>       <li>4</li>       <li>5</li>     </ul> 需求:给 5 个 li 标签都添加click事件 , 点击变色;我们分别获取 li 标签, 然后给 5 个li 标签注册5次click 事件 ; 减少事件监听的数量 , 有利于优化浏览器性能; 所以我们使用事件委托 ,即让 li 标签的上级元素(祖先节点)代理click 事件 , 也可以表述 li 标签把click 事件委托给 ul 标签;

3.分析

分析流程 :事件委托的原理是事件冒泡 , 当我们点击 li 标签时 , 浏览器就会检查是否有事件存在 , 即从当前节点(li)向外冒泡 ,到了ul 节点发现有click 事件 , 就会执行 ,然后停止冒泡; 一般设置事件委托时 , 优先给父节点 、 爷爷节点设置 ,不推荐跳的级数太大;就近委托 

4. 事件委托的优缺点

优点: 1、减少事件注册,节省内存。比如 ,在 table 上代理所有 td 的 click 事件,在 ul 上代理所有 li 的 click 事件。

2、简化了 dom 节点更新时,相应事件的更新。比如

3、不用在新添加的 li 上绑定 click 事件。

4、当删除某个 li 时,不用移解绑上面的 click 事件。

缺点: 1、事件委托基于冒泡,对于不冒泡的事件不支持

2、层级过多,冒泡过程中,可能会被某层阻止掉。

3、理论上委托会导致浏览器频繁调用处理函数,虽然很可能不需要处理。所以建议就近委托, 比如在 table 上代理 td,而不是在 document 上代理 td。

4、把所有事件都用代理就可能会出现事件误判。比如,在 document 中代理了所有 button 的 click 事件,另外的人在引用改 js 时,可能不知道,造成单击 button 触发了两个 click 事件

 

标签:委托,关于,代理,li,冒泡,click,事件
来源: https://www.cnblogs.com/zhulongxu/p/16535471.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有