Js中的事件委托/事件代理

什么叫事件委托/事件代理呢 ?

JavaScript高级程序设计上讲:事件委托就是利用事件冒泡,只指定一个事件处理程序,就可以管理某一类型的所有事件。

事件冒泡:

当事件发生后,这个事件就要开始传播(从里到外或者从外向里),为什么要传播呢?因为事件源本身(可能)并没有处理事件的能力,即处理事件的函数(方法)并未绑定在该事件源上。

例如我们点击一个按钮时,就会产生一个click事件,但这个按钮本身可能不能处理这个事件,事件必须从这个按钮传播出去,从而到达能够处理这个事件的代码中.

事件委托:

是利用事件的冒泡原理来实现的,何为事件冒泡呢?

就是事件从最深的节点开始,然后逐步向上传播事件,举个例子:

div > ul > li > a

比如给最里面的a加一个click点击事件,那么这个事件就会一层一层的往外执行,执行顺序: 

有这样一个机制,那么我们给最外面的div加点击事件,那么里面的 ul,li,a 做点击事件的时候,都会冒泡到最外层的 div 上,所以都会触发,这就是事件委托,委托它们父级代为执行事件.

为什么要用事件委托:

一般来说,dom需要有事件处理程序,我们都会直接给它设事件处理程序就好了,那如果是很多的dom需要添加事件处理呢?比如我们有100个li,每个li都有相同的click点击事件,可能我们会用for循环的方法,来遍历所有的li,然后给它们添加事件,那这么做会存在什么影响呢 ?

在JavaScript中,添加到页面上的事件处理程序数量将直接关系到页面的整体性能,因为需要不断的与dom节点进行交互,访问dom的次数越多,引起浏览器重绘与重排的次数也就越多,就会延长整个页面的交互就绪时间,这就是为什么性能优化的主要思想之一就是减少DOM操作的原因;如果要用事件委托,就会将所有的操作放到js程序里面,与dom的操作就只需要交互一次,这样就能大大的减少与dom的交互次数,提高性能;

原文地址:https://www.cnblogs.com/hai-cheng/p/10662352.html

时间: 2024-11-03 01:25:48

Js中的事件委托/事件代理的相关文章

JavaScript中事件委托(事件代理)详解

在JavaScript的事件中,存在事件委托(事件代理),那么什么是事件委托呢? 事件委托在生活中的例子: 有三个同事预计会在周一收到快递.为签收快递,有两种办法:一是三个人在公司门口等快递:二是委托给前台MM代为签收.现实当中,我们大都采用委托的方案(公司也不会容忍那么多员工站在门口就为了等快递).前台MM收到快递后,她会判断收件人是谁,然后按照收件人的要求签收,甚至代为付款.这种方案还有一个优势,那就是即使公司里来了新员工(不管多少),前台MM也会在收到寄给新员工的快递后核实并代为签收. 事

理解js事件冒泡事件委托事件捕获

js事件冒泡 javascript的事件传播过程中,当事件在一个元素上出发之后,事件会逐级传播给先辈元素,直到document为止,有的浏览器可能到window为止,这就是事件冒泡现象. <div id="col">    <p>        <a id="btn" href="#">button</a>    </p></div> <script> let b

javascript 事件委托(代理)

事件委托(代理):就是利用事件冒泡机制,在最顶层触发事件的dom对象上绑定一个处理函数.在当有需要很多dom对象要绑定事件的情况下,可以使用事件委托. 事件委托的好处是:节省资源 和 新增的元素也会有事件处理机制(这是项目中比较常见的问题) 简要的用两个例子来解释一下事件委托这回事... 先说说要产生的效果:我的想法是利用按钮点击新增li标签,而且新增的li标签也要有点击事件... HTML 代码 <ul id="ul1"> <li>1111</li>

JS中一些常用的事件(笔记)

window.onload事件:当文档和其所有外部资源(如图片)完全加载并显示给用户时就会触发它. window.onload = function (){ //当加载完当前页面和其所有外部资源(如图片)后,执行这个函数 } window.onunload事件:当用户离开当前页面时会触发该事件 window.onunload = function (){ //离开该页面时执行该函数 } event对象:该对象代表了当前事件的状态,并且只有在事件发生的过程中才生效.对象中存放的是键盘按键的状态.鼠

js中的点击事件(click)的实现方式

<!DOCTYPE html> <html lang="zh"> <head> <meta charset="UTF-8"> <title>js中的点击事件(click)的实现方式</title> </head> <body> <!-- 第三种方式--> <button id="btn" onclick="threeFn()

JS——事件委托或代理

那什么叫事件委托呢?它还有一个名字叫事件代理,JavaScript高级程序设计上讲:事件委托就是利用事件冒泡,只指定一个事件处理程序,就可以管理某一类型的所有事件.那这是什么意思呢?网上的各位大牛们讲事件委托基本上都用了同一个例子,就是取快递来解释这个现象,我仔细揣摩了一下,这个例子还真是恰当,我就不去想别的例子来解释了,借花献佛,我摘过来,大家认真领会一下事件委托到底是一个什么原理: 有三个同事预计会在周一收到快递.为签收快递,有两种办法:一是三个人在公司门口等快递:二是委托给前台MM代为签收

[转载]JS事件委托(事件代理)的原理以及优缺点

1,什么是事件委托:通俗的讲,事件就是onclick,onmouseover,onmouseout,等就是事件,委托呢,就是让别人来做,这个事件本来是加在某些元素上的,然而你却加到别人身上来做,完成这个事件. 也就是:利用冒泡的原理,把事件加到父级上,触发执行效果. 好处呢:1,提高性能. 我们可以看一个例子:需要触发每个li来改变他们的背景颜色. <ul id="ul"> <li>aaaaaaaa</li> <li>bbbbbbbb&l

事件委托(事件代理)的原理以及优缺点是什么?

事件委托原理:事件冒泡机制.优点:1.可以大量节省内存占用,减少事件注册.比如ul上代理所有li的click事件就很不错.2.可以实现当新增子对象时,无需再对其进行事件绑定,对于动态内容部分尤为合适缺点:事件代理的常用应用应该仅限于上述需求,如果把所有事件都用事件代理,可能会出现事件误判.即本不该被触发的事件被绑定上了事件. 看下面的例子: 1 <ul id="ul1"> 2 <li>111</li> 3 <li>222</li&g

对jQuery中on方法委托事件的理解

关于on方法中的委托事件,官方JQ API如下: http://api.jquery.com/on/#on-events-selector-data-handler 参考大牛阮一峰的博文: http://www.ruanyifeng.com/blog/2011/08/jquery_best_practices.html 什么时候使用委托事件: 1.对未被创建的元素添加事件监听 2.避免频繁添加或删除event handler,委托父元素来进行事件处理 使用委托事件的优点: 1.大量减少监听元素的