当页面中发生某种事件(比如鼠标点击,鼠标滑过等)时,毫无疑问子元素和父元素都会接收到该事件,可具体顺序是怎样的呢?冒泡和捕获则描述了两种不同的顺序。
要了解委托的原理,首先要理解DOM事件的过程。
Dom事件分为两个阶段,如图:
事件捕获阶段(红色箭头顺序)
事件冒泡阶段(绿色箭头顺序)
在事件捕获阶段,事件源依次从defaultView(可以理解为整个页面)一直传播到具体的目标(target)。从广泛到具体。
在事件冒泡阶段,事件源依次从target传播到defaultview。从具体到广泛,范围越来越大,像冒泡过程一样,气泡越来越大(范围越来越大)
而事件委托就是利用的DOM事件的事件捕获阶段。把具体dom上发生的事件,委托给更大范围的dom去处理。好比送信员,如果每次都把信件送给每一户,非常繁琐。但是如果交给一个大范围的管理者,比如小区的传达室,那么事情会变得非常简单。事件委托就类似这种原理,我页面中有很多按钮,如果不使用事件委托,我只能在每个按钮上注册事件。非常麻烦。但如果我把事件注册在一个大范围的div(假设所有的按钮都在这个div中),那么我只要注册一次事件,就可以处理所有按钮(只要按钮包含在上述div中)事件的响应了。