要了解事件委托你必须先了解事件传播
事件传播
事件传播是指从页面中接收事件的顺序,也可理解为事件在页面中传播的顺序。事件传播分为三个阶段:
- 捕获阶段 —— 从window,document 和根元素开始,事件向下扩散至目标元素的祖先
- 目标阶段 —— 事件在用户单击的元素上触发
- 冒泡阶段——最后,事件冒泡通过目标元素的祖先,一直到根元素 document 和 window。
事件委托
事件委托是把事件侦听器附加到按钮的父级,并在单击按钮时捕获冒泡事件。
当用事件委托的时候,根本就不需要去遍历元素的子节点,整体只注册一次事件,并没有给每个子元素都注册个监听。这样可以大大的减少dom操作,这就是事件委托的意义。
总结
优点:
- 可以大量节省内存占用,减少事件注册。比如ul上代理所有li的click事件就很不错。
- 可以实现当新增子对象时,无需再对其进行事件绑定,对于动态内容部分尤为合适
缺点:
事件代理的常用应用应该仅限于上述需求,如果把所有事件都用事件代理,可能会出现事件误判。即本不该被触发的事件被绑定上了事件。