js中的冒泡和捕获其实都是事件流的不同表现,这两者的产生是因为某两个大公司完全不同的事件流概念产生的。(事件流:是指页面接受事件的顺序)。
举个简单的例子:
<div id="div">
<p id="p">
<input type="button" value="1" id="in"/>
</p>
</div>
<script type="text/javascript">
var inp = document.getElementById("in");
var myp = document.getElementById("p");
var d = document.getElementById("div");
inp.οnclick=function(){
alert(1);
}
myp.οnclick=function(){
alert(2);
}
d.οnclick=function(){
alert(3);
}
可以看到div里面有一个p标签,p标签里面又有一个input标签,这是一个典型的嵌套,并且每一层都设置了点击事件,这种情况下就会有冒泡(dom0级事件不支持捕获)。
当我们点击最里面的input标签的时候,事件的执行顺序是从内到外,即先执行input标签,在执行p标签,最后执行div标签。这就是所谓的冒泡。
捕获的话其实就是事件执行顺序的方向相反,是从外到内依次执行的、。so这就是冒泡和捕获,有的情况下我们会遇到这种情况,这时候就要灵活的设置事件来达到我们需要的效果。