将子元素的事件绑定,委托给父元素。直接给父元素绑定事件,利用事件的冒泡,找到点击的事件源,判断这次的事件是谁触发的,来进行相应的处理。

    事件委托是对事件处理程序过多问题的解决方案。其利用冒泡,只指定一个事件处理程序,就可以管理某一类型的所有事件。

    在事件对象的 target 属性中,保存着事件源,通过这个属性,就能够判断具体是谁触发的事件。

    1. nav.onclick = function (e) {
    2. e = e || window.event;
    3. let tar = e.target || e.srcElement;
    4. if (tar.nodeName.toLowerCase() == 'a') {
    5. tar.className += 'current';
    6. }
    7. }

    一般用于处理相同业务的同级元素进行批量委托与其父元素,做的事情都是类似的,那么就只需要一个函数就可以了,节省了一些内存,能够提升整体性能。

    如果可行的话,可以考虑为 document 对象添加一个事件处理程序,用于处理页面中发生的某种特定类型的事件。

    • document 对象很快就可以访问,而且可以在页面生命周期的任何时点为它添加事件处理程序

    • 在页面中设置事件处理程序所需的时间更少,且只添加一个事件处理程序所需的 DOM 引用更少,所花的时间更少。

    • 整个页面占用的内存空间更少,能够提升整体性能。

    适用的情形:

    • 容器中很多后代元素的某个行为要进行的操作,委托给容器处理是不错的选择

    • 元素是动态绑定的,只需要给父元素绑定事件,不管元素什么时候出现,都会冒泡给父元素,就不需要再帮绑定之后再分别获取进行事件绑定

    • 需求是除了某某某,剩下的操作都是干同样的事情(此时把点击行为的操作委托给 body,事件源是某某做什么,不是同一做什么)