定义
事件冒泡: 事件从最深节点开始,然后逐步向上传播事件
事件委托:事件委托是利用事件冒泡原理实现的,就是事件目标自身不处理事件,而是把处理任务委托给其父元素或者祖先元素,甚至根元素
事件委托的应用场景
- 为DOM中的很多元素绑定相同的事件
- 为DOM中尚不存在的元素绑定事件
注意:使用事件委托时,如果注册到目标元素上的其他事件处理程序使用了.stopPropagetion()阻止了事件传播,那么事件委托就会失效
支持事件委托的事件
支持的事件:click、mousedown、mouseup、keydown、keyup、keypress、change
不支持的事件:focus、blur
事件委托的优缺点
优点:
1.减少事件注册,节省内存
2.简化了dom节点更新时,相应事件的更新,比如:不用在新添加的li上绑定click事件,当删除某个li时,不用解绑上面的click事件
缺点:
1.事件委托基于冒泡,对于不冒泡的事件不支持
2.层级过多,冒泡过程中,可能会被某层阻止掉
3.理论上委托会导致浏览器频繁调用处理函数,所以建议就近委托,比如在table上代理td,而不是在document上代理td
4.把所有事件都用代理可能会出现事件误判