在前端開發工作中,由于浏覽器相容性等問題,我們會經常用到“停止事件冒泡”和“阻止浏覽器預設行為”。
浏覽器預設行為:
在form中按Enter鍵就會送出表單;單擊滑鼠右鍵就會彈出context menu.
a标簽
1..停止事件冒泡
JavaScript代碼
1 //如果提供了事件對象,則這是一個非IE浏覽器2 if ( e && e.stopPropagation )3 //是以它支援W3C的stopPropagation()方法4 e.stopPropagation();
5 else6 //否則,我們需要使用IE的方式來取消事件冒泡 7 window.event.cancelBubble = true;8 return false;
2.阻止浏覽器的預設行為
1 element.|| window.event;
4 5 //如果提供了事件對象,則這是一個非IE浏覽器 6 7 if (event&& event.preventDefault) { 8 9 //阻止預設浏覽器動作(W3C) 10 11 event.preventDefault();
12 13 } else {
14 15 //IE中阻止函數器預設動作的方式 16 17 window.event.returnValue = false;
18 19 }
20 21 //event.preventDefault?event.preventDefault():(event.returnValue = false); 22 23 }
或者直接傳回false:
element.onclick = function(event) {
//...
return false;
}
但是在使用return false時必須注意:
1、jQuery有自己的事件處理層,也對處理程式做了封裝,如果事件處理程式傳回false,事件冒泡和浏覽器預設事件都會被阻止。
2、使用原生javaScript,在事件處理程式中傳回false隻會阻止浏覽器預設行為,而事件冒泡依然存在。
3、浏覽器預設行為和事件冒泡是互相獨立的。阻止事件冒泡不會影響預設行為,反之亦然。
注意:
有一些浏覽器行為是在事件處理程式執行前發生的,也就是說這些預設行為是無法取消的,如:在大部分浏覽器上滑鼠移到一個超連結上超連結的樣式會發生改變,這個動作是發生在focus事件之前的,是focus事件處理程式中無法取消的。