# 一、定义

DOM2级事件定义了两个事件处理方法:==addEventListener==(event, function, useCapture)和==removeEventListener==(event, function, useCapture)

  • useCapture == true时,在==捕获阶段==调用事件处理程序;
  • useCapture == flase(默认)时,在==冒泡阶段==调用事件处理程序

# 二、事件执行顺序

  • 事件冒泡:由最具体的元素逐级向上传播到最不具体的节点;叶-->根
  • 事件捕获:由最不具体的元素逐级向下传播到最具体的节点;根-->叶

w3c模型将两者中和,事件流包括三个阶段:事件捕获阶段 -->处于目标阶段 -->事件冒泡阶段

image 100*100

# 三、实例

当事件处于目标阶段时,事件调用顺序决定与书写顺序,demo如下 <html>

<div id="outer">
  <div id="inner"></div>
</div>

<script>
    var outer = document.getElementById('outer');
    var inner = document.getElementById('inner');
    
    outer.addEventListener('click',function(){
      alert('outer');
    },false);
    inner.addEventListener('click',function(){
      alert('inner');
    },false);
    
    outer.addEventListener('click',function(){
      alert('456');
    },true);
    inner.addEventListener('click',function(e){
      alert('123');
      e.stopPropagation();
    },true);
</script>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23

执行结果:456 -> inner -> 123 -> (outer) stopPropagation()用来阻止事件进行,因此123之后的outer不执行;