在javascript的dom操做作確定會遇到js的冒泡事件,最多見的是div彈窗事件如圖解javascript
當點擊灰色部分是彈窗消失,點擊黑色部分時沒有效果。css
經過下面一段代碼來分析js的冒泡事件html
html代碼:java
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>js冒泡事件</title> <link rel="stylesheet" href="style.css"> </head> <body> <div class="container"> <h1>js冒泡事件分析</h1> <hr> <div class="box bg-gray"> <button class="btn"> Click me ! </button> </div> </div> <script> var box=document.querySelector(".box"), btn=document.querySelector(".btn"); box.onclick=function(event){ alert("我是div"); } btn.onclick=function(event){ alert("我是button"); } </script> </body> </html>
再看效果:http://2.liteng.sinaapp.com/javascript/starevent.htmlnode
使用firefox瀏覽器的默認開發者工具的3d視圖能夠清晰的看出div層的前後順序瀏覽器
圖解:app
當點擊按鈕時會彈出「我是button」再彈出「我是div」,由於先觸發按鈕事件以後觸發下一層div點擊事件,dom
事件的觸發是先進先出原則。ide
圖解:工具
那麼有些時候咱們並不想多個事件的觸發而致使衝突,因此event有stopPropagation();方法來阻止冒泡
還有一個event的方法也是比較經常使用的好比一個連接,點擊連接時我不想跳轉,則使用event.preventDefault();方法
實例代碼以下
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>js冒泡事件</title> <link rel="stylesheet" href="style.css"> </head> <body> <div class="container"> <h1>js冒泡事件分析</h1> <hr> <div class="box bg-gray"> <button class="btn"> Click me ! </button> <a href="http://www.liteng.org" id="link">我是連接</a> </div> </div> <script> var box=document.querySelector(".box"), btn=document.querySelector(".btn"); box.onclick=function(event){ alert("我是div"); } btn.onclick=function(event){ alert("我是button"); event.stopPropagation(); } document.getElementById('link').onclick=function(event){ alert("我是link"); event.preventDefault(); } /*區分event.stopPropagation();和event.preventDefault(); 前者使用stopPropagation()方法阻止事件冒泡 後者是阻止默認的行爲好比阻止超連接 */ </script> </body> </html>