事件模型

考虑页面上有一个元素嵌套在另外一个元素之中的情况,我们分别称他们为父元素和子元素,子元素占据了父元素的一部分可见区域,实际情况通常会有多层的嵌套。

那么用户在子元素上单击鼠标的时候,哪个元素实际接收事件呢?子元素?父元素?还是两者都会接收?如果两者都接收的话,谁先谁后呢?

W3C组织在DOM事件规范中给出了问题的答案。

事件从父元素流出,经过中间件,向下到达最先指定的子元素,这一过程就是众所周知的”事件捕获“。子元素访问事件的时候,事件通过”事件冒泡“(event bubbling)反向流回元素层级中的高层节点。两股事件流相互结合允许开发人员以最合适其页面结构的方式捕获和处理事件。只有实际注册了事件处理器的元素才会处理事件,这保证了系统的轻量。事件流处理机制的总体方针是对各浏览器厂商不同处理行为的折中方案,它在各原生开发框架内部保持了一致,部分框架使用事件捕获,而另外一部分使用事件冒泡。

所以一般可以通过事件的stopPropagation和preventDefault方法来阻止事件默认的动作的发生

比如用户单击页面链接时,默认动作是让浏览器转向链接指定的地址,可以通过在事件处理器中调用preventDefault函数来拦截事件,阻止默认的动作。

你可能感兴趣的:(事件模型)