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這就是冒泡和捕獲,有的情況下我們會遇到這種情況,這時候就要靈活的設置事件來達到我們需要的效果。