javaScript對冒泡做一些分析與測試

<script src="js/冒泡.js"></script>



<script type=text/javascript>
	
</script>

<style>
	body{
		margin:0px;
		padding:0px;
		}
	#div1{
		width:300px;
		height:200px;
		background:#CC3;
		margin:30px auto 0px 10px;
		position:relative;
		}
	#div2{
		width:300px;
		height:200px;
		background:#096;
		position:absolute;
		left:310px;
	}
	#div11{
		margin-left:10px;
		}	
</style>

</head>
<body id='obody'>
	<div id='div1' class='div1'>
    	xxxxxx
        <div id='div11' class='div1'>fasdfa</div>
    </div>
	<div id='div2' class='div1'>
    
    </div>
    <div id='div3' class='div1'  style="width:200px">
    	<div id='div31' class='div1'></div>
    </div>

</body>

 

 

//冒泡
//若有結構如body--div1--div11  冒泡就是從div11--div1--body每一個節點都會觸發事件
//來一例子
window.οnlοad=function(){
		/*
		document.getElementById('obody').οnclick=function(evt){
				var e=evt||winow.event;
				console.info("返回觸發此事件的元素: "+e.target+" "+"返回其事件監聽器觸發該事件的元素: "+e.currentTarget);
				console.info("返回觸發此事件的元素id: "+e.target.id+" "+"返回其事件監聽器觸發該事件的元素id: "+e.currentTarget.id);
				
				//結果對比下
				//返回觸發此事件的元素: [object HTMLDivElement] 返回其事件監聽器觸發該事件的元素: [object HTMLBodyElement]
				//冒泡.js:9 返回觸發此事件的元素id: div1 返回其事件監聽器觸發該事件的元素id: obody
				//冒泡.js:8 返回觸發此事件的元素: [object HTMLDivElement] 返回其事件監聽器觸發該事件的元素: [object HTMLBodyElement]
				//冒泡.js:9 返回觸發此事件的元素id: div11 返回其事件監聽器觸發該事件的元素id: obody
			};
			*/
		//由冒泡特性,如果我對body--div1--div三個節點分別添加了事件,根據其特性可知,點了div11,他的事件會觸發,div1也會,當然包括body了
		//所以有個要解決的問題就是,點了div11就觸發div11的事件,
		//解決方案有兩種,一種不讓它向上冒泡,第二種就是代理了,第一種是有缺點的
		
		//第一種
		
		
		document.getElementById('obody').οnclick=function(evt){
				var e=evt||winow.event;
				console.info("謝謝光顧body");
			};
		document.getElementById('div11').οnclick=function(evt){
				var e=evt||winow.event;
				console.info("謝謝光顧div11");
				e.stopPropagation();
				//換一種不行
				//e.preventDefault();//通知瀏覽器不要執行與事件關聯的默認動作
				//事件傳播和默認操作是二個不同的機制,  
    			//一個是向上冒泡 一個是執行默認操作  
			};
			
			
			//測試結果ok
		//第二種
		//爲了正常的向上冒泡,那就用代理吧(聽起來可怕,實現起來很簡單)
		
		/*
		document.getElementById('obody').οnclick=function(evt){
				var e=evt||winow.event;
				if(e.target.id=='div11'){
						console.info("謝謝光顧div11");
					}else if(e.target.id=='obody'){
							console.info("謝謝光顧body");
						}
			};
			*/
	};

    //到此結束

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章