一、JavaScript事件之事件流

106 阅读1分钟

内容参考《JavaScript高级程序设计》一书

1、事件流

事件是JavaScript代码与HTML交互的一种方式,而事件流则描述了页面接收事件的顺序,最初阶段IE与NetSpace提出的事件流分别的是事件冒泡与事件捕获,是两种相反的处理方式。而DOM2 Event规定事件流一般有三个阶段即:事件捕获阶段->到达目标阶段->事件冒泡阶段

1.1 事件捕获

事件捕获是指目标节点是最后收到事件的,可以把事件捕获看作是一种瀑布方式(目标节点在最下面),事件自上而下。事件捕获的目的是为了在目标节点之前拦截事件。

<!DOCTYPE html>
<html>
<head>
  <meta charset="utf-8">
  <title>菜鸟教程(runoob.com)</title>
</head>
<script>
  function showMessage () {
    console.log("Hello world!");
  }
</script>
<body>
  <input type="button" value="Click Me" onclick="showMessage()"/>
</body>

</html>

如上图代码,当我们点击这个button按钮时,事件先从document开始然后到htmlbody最终到达我们目标元素

image.png 在DOM事件流中,实际的目标元素在捕获阶段是不会接收到事件的,捕获阶段一般到该目标元素的父级元素结束,如上代码也就是到body元素结束

1.2 事件冒泡

事件捕获流程结束后,事件到达是DOM2 Event中第二个阶段,也是事件到达目标节点阶段。通常在此阶段处理事件也被看作是事件冒泡的开始,然后事件流开始了第三阶段:事件冒泡。相对于事件捕获,事件冒泡是自底向上的。

image.png

事件冒泡是大多数程序员在实际开发中都会遇到的,阻止事件冒泡可参考js中阻止事件冒泡的几种方法 - 中文呀 - 博客园 (cnblogs.com)