**事件的传播**
<div class="box01>
<div class="box02>
<div class="box03></div>
</div>
</div>
当.box01,.box02,.box03,都添加了相同的事件,并且是包含关系,
关于事件传播网景公司和微软公司有不同的理解;
微软公司认为事件其实应该从内向外传播,也就是事件触发时,应当先触发当前元素上的事件然后在向当前元素的祖先传播,也就是说事件应该在冒泡阶段执行,
网景公司认为事件应该是从外向内传播,也就是当事件触发时,应该先触发当前元素的最外层的祖先元素的事件,然后在向内传播给后代元素;
最终,w3c综合了两个公司的方案,将事件传播分成了三个阶段,
1,捕获阶段
在捕获阶段时,从最外层的祖先元素向目标元素进行事件的捕获,但是此时并不会触发事件,
2,目标阶段
事件捕获到目标元素;
3,冒泡阶段
事件从目标元素向他的祖先元素传递,依次触发祖先元素上的事件;
这种分歧在日常生活中也很常见,举个例子,某个地方出了抢劫事件,我们有多种处理方式
村里先发现,报告给乡里,乡里报告到县城,县城报告给市里。。。。
市里先知道这事儿,然后交代给县城怎么处理,县城交给到乡里处理,乡里交给村里处理
其实绝大多数情况下我们只是想触发目标元素的事件,并不想触发祖先元素的事件,所以我们必须要阻止游览器的默认冒泡,
1.event.stopPropagation()方法
这是阻止事件的冒泡方法,不让事件向documen上蔓延,但是默认事件任然会执行,当你掉用这个方法的时候,如果点击一个连接,这个连接仍然会被打开,
2.event.preventDefault()方法
这是阻止默认事件的方法,调用此方法是,连接不会被打开,但是会发生冒泡,冒泡会传递到上一层的父元素;
3.return false ;
这个方法比较暴力,他会同事阻止事件冒泡也会阻止默认事件;写上此代码,连接不会被打开,事件也不会传递到上一层的父元素;可以理解为return false就等于同时调用了event.stopPropagation()和event.preventDefault()