如果在頁面中重疊了多個元素,並且重疊的這些元素都綁定了同一個事件,那么就會出
現冒泡問題。
//HTML 頁面
<div style="width:200px;height:200px;background:red;">
<input type="button" value="按鈕" />
</div>
//三個不同元素觸發事件
$('input').click(function () {
alert('按鈕被觸發了!');
});
$('div').click(function () {
alert('div 層被觸發了!');
});
$(document).click(function () {
alert('文檔頁面被觸發了!');
});
注意:當我們點擊文檔的時候,只觸發文檔事件;當我們點擊 div 層時,觸發了 div 和
文檔兩個;當我們點擊按鈕時,觸發了按鈕、div 和文檔。觸發的順序是從小范圍到大范圍。
這就是所謂的冒泡現象,一層一層往上。
jQuery 提供了一個事件對象的方法:event.stopPropagation();這個方法設置到需要觸發
的事件上時,所有上層的冒泡行為都將被取消。
$('input').click(function (e) {
alert('按鈕被觸發了!');
e.stopPropagation();
});
網頁中的元素,在操作的時候會有自己的默認行為。比如:右擊文本框輸入區域,會彈
出系統菜單、點擊超鏈接會跳轉到指定頁面、點擊提交按鈕會提交數據。
$('a').click(function (e) {
e.preventDefault();
});
//禁止提交表單跳轉
$('form').submit(function (e) {
e.preventDefault();
});
注意:如果想讓上面的超鏈接同時阻止默認行為且禁止冒泡行為,可以把兩個方法同時
寫上:event.stopPropagation()和 event.preventDefault()。這兩個方法如果需要同時啟用的時候,
還有一種簡寫方案代替,就是直接 return false。
$('a').click(function (e) {
return false;
});