當事件發生後,這個事件就要開始傳播(從裡到外或者從外向里)。為什麼要傳播呢?因為事件源本身(可能)並沒有處理事件的能力,即處理事件的函式(方法)並未綁定在該事件源上。例如我們點擊一個按鈕時,就會產生一個click事件,但這個按鈕本身可能不能處理這個事件,事件必須從這個按鈕傳播出去,從而到達能夠處理這個事件的代碼中(例如我們給按鈕的onclick屬性賦一個函式的名字,就是讓這個函式去處理該按鈕的click事件),或者按鈕的父級綁定有事件函式,當該點擊事件發生在按鈕上,按鈕本身並無處理事件函式,則傳播到父級去處理。
基本介紹
- 中文名:事件冒泡
- 外文名:Event Bubbling
- 套用:軟體編程
- 所屬學科:邏輯學
事件介紹
<BODY onclick="alert('aaa');"><div onclick="alert('bbb');"> <a href="#" class="cooltip" title="這是我的超連結提示1。" onclick="alert('ddd');"> 提示 </a></div></BODY>
引發問題
阻止事件
<!DOCTYPE html><html> <head> <meta charset = "utf-8" > <script type = "text/javascript" >var onBodyClickFn = function() { alert("我是body上事件");}window.onload = function() { var body = document.body; body.addEventListener('click', onBodyClickFn, false); // false 冒泡階段 //停止事件冒泡 document.getElementById("stopBubble").addEventListener("click", function(event) { alert("我是stopBubble_btn上事件"); event.stopPropagation(); }, false); //正常事件冒泡 document.getElementById("bubble").addEventListener("click", function() { alert("我是bubble_btn上事件"); }, false);}; </script></head > <body > <button id = 'stopBubble' > 阻止冒泡 < /button><button id="bubble">正常事件冒泡</button > </body></html>
擴展封裝
$("element").bind("click",function(event){ //event為事件對象 //......... event.stopPropagation(); //停止事件冒泡 });
阻止默認行為
$('#submit').bind('click',function(event) { var username = $('#username').val(); if (username == "") { alert('用戶名不能為空!'); event.preventDefault(); //阻止默認行為 }})
阻止方法
event.preventDefault(); 改寫為: return false;event.stopPropagation(); 改寫為: return false;