javascript阻止冒泡和默認事件(默認行爲)

阻止冒泡。冒泡簡單的舉例來講,兒子知道了一個祕密消息,它告訴了爸爸,爸爸知道了又告訴了爺爺,一級級傳遞從而引發事件的混亂,而阻止冒泡就是不讓兒子告訴爸爸,爸爸天然不會告訴爺爺了。下面的domo就是很好的例子。javascript

<!DOCTYPE html>
<html>

	<head>
		<meta charset="UTF-8">
		<title></title>
		<style type="text/css">
			#box {
				width: 300px;
				height: 300px;
				background: red;
				display: none;
			}
		</style>
		<script type="text/javascript">
			window.onload = function() {
					var btn = document.getElementById('btn');
					var box = document.getElementById('box');
					btn.onclick = function(ev) {
						var oEvent = ev || event;
						box.style.display = 'block';
						//oEvent.cancelBubble = true;//高版本瀏覽器
						stopBubble(oEvent);
						//在低版本的chrome和firefox瀏覽器中須要兼容性處理
						//高版本chrome和firefox瀏覽器直接使用上面這行代碼便可
					}
					document.onclick = function() {
						box.style.display = 'none';
					}

				}
				//阻止冒泡事件的兼容性處理
			function stopBubble(e) {
				if(e && e.stopPropagation) { //非IE
					e.stopPropagation();
				} else { //IE
					window.event.cancelBubble = true;
				}
			}
		</script>
	</head>

	<body>
		<input type="button" id="btn" value="語言" />
		<div id="box"></div>
	</body>

</html>


我所實現的效果是:點擊按鈕btn讓box顯示,而點擊其餘地方則讓box消失。

若是我不阻止冒泡的話,那麼首先btn會觸發點擊時間,讓盒子顯示,可是因爲box是包含在document中的,因此會向上冒泡又觸發document的點擊事件,盒子又消失。這個事件的執行順序能夠在不一樣的點擊事件中使用alert來驗證。關於cancelBubble的兼容性處理在高版本的chrome和firefox中已經不須要兼容處理了,直接使用oEvent.cancelBubble = true 便可。下面的阻止瀏覽器事件的兼容性處理在高版本瀏覽器中一樣不須要。css


默認事件。即瀏覽器自己具有的功能。
html

function preventDefa(e){
	if(window.event){
		//IE中阻止函數器默認動做的方式 
		window.event.returnValue = false; 
	}
	else{
		//阻止默認瀏覽器動做(W3C) 
		e.preventDefault();
	} 
}
這種是兼容性寫法,可是若是你只須要支持高版本瀏覽器的話,那麼如上文同樣,一句話便可。

btn.onclick = function (){
	return false;
}
相關文章
相關標籤/搜索