📅  最后修改于: 2023-12-03 14:42:30.691000             🧑  作者: Mango
JavaScript 中的事件被分为三个阶段:捕获阶段、目标阶段和冒泡阶段。这些阶段定义了事件在 DOM 树中传播的方式,从而影响到事件处理函数的执行顺序。
事件的捕获阶段是从根节点开始,向下遍历 DOM 树直到目标元素前一个元素的过程。在该阶段中,事件处理程序在父元素上被调用,依次向下执行,直到到达目标元素。
// 捕获阶段
element.addEventListener('click', function() {
console.log('捕获阶段,父元素执行!');
}, true);
需要注意的是,addEventListener 函数的第三个参数指定是否在捕获阶段执行事件处理程序,默认为 false 表示在冒泡阶段执行事件处理程序,而 true 表示在捕获阶段执行事件处理程序。
事件的目标阶段是在目标元素上执行事件处理程序的阶段。在该阶段中,事件处理程序在目标元素上被调用。
// 目标阶段
element.addEventListener('click', function() {
console.log('目标阶段,目标元素执行!');
});
需要注意的是,当在目标元素上注册了多个事件处理程序时,它们的执行顺序是不确定的,因此应该尽量避免在同一个元素上注册多个事件处理程序。
事件的冒泡阶段是从目标元素开始,向上遍历 DOM 树直到根节点的过程。在该阶段中,事件处理程序在父元素上被调用,依次向上执行,直到到达根节点。
// 冒泡阶段
element.addEventListener('click', function() {
console.log('冒泡阶段,父元素执行!');
});
需要注意的是,addEventListener 函数的第三个参数指定是否在捕获阶段执行事件处理程序,默认为 false 表示在冒泡阶段执行事件处理程序,而 true 表示在捕获阶段执行事件处理程序。因此,如果需要在冒泡阶段中执行事件处理程序,应该将第三个参数设置为 false 或不指定。
JavaScript 中的事件阶段对于理解事件传播机制以及处理事件的执行顺序非常重要。理解事件的三个阶段有助于我们编写更加优秀的代码,提高代码的可读性和可维护性。