什么叫事件委托/事件代理呢 ?
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的交互次数,提高性能;

最新文章

  1. 012.对netmap API的解读
  2. <概要>
  3. C++ sort函数
  4. C#_微信支付V3
  5. python numpy笔记:给matlab使用者
  6. centos 7访问windows共享文件夹
  7. bcb 如何在DLL中捕捉系统级异常
  8. c宏的MAX函数
  9. 瑞柏匡丞_免费app开发是否可行
  10. file_get_contents 获取不了网页内容
  11. 浅谈postMessage多页面监听事件
  12. Java SE基础部分——常用类库之Math和Random类(随机产生数值)
  13. Linux 下卸载MySQL 5
  14. 用ifconfig命令,只有lo,没有eth0的解决方案
  15. js判断是否是ie浏览器且给出ie版本
  16. sudoku--设想
  17. [国嵌笔记][011][Linux密码破解]
  18. mysql 索引中的USING BTREE 的意义
  19. Node.js和html数据交互(一) form表单
  20. SogouCloud.exe进程导致SQL Server服务无法启动

热门文章

  1. CentOS 忘记root密码(重置root密码)
  2. C#设计模式--代理模式(学习Learning hard 设计模式笔记)
  3. Maven 项目管理从未如此通畅
  4. 关于nginx下drupal7无法$_GET获取参数的问题
  5. Ajax 与 JSON
  6. 一起来学习android自定义控件—边缘凹凸的View
  7. C#Owin auth20开发 OwinStartup 不会触发的解决办法
  8. Nginx 配置多站点vhost
  9. ExpressRoute 合作伙伴和对等位置
  10. node环境和浏览器的区别