国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 編程 > JavaScript > 正文

深入理解JS DOM事件機制

2019-11-20 09:17:39
字體:
來源:轉載
供稿:網友

1、事件流

html 元素觸發事件的順序。

2、事件冒泡IE的事件流叫做事件冒泡(event bubbling),即事件開始時由最具體的元素(文檔中嵌套層次最深的那個節點)接收,然后逐級向上傳播到較為不具體的節點(文檔)。3、事件捕獲事件捕獲的思想是不太具體的節點應該更早的接收到事件,而最具體的節點應該在最后接收到節點。事件捕獲的用意在于事件到達預定目標之前捕獲它。

DOM事件流
“DOM2級事件流”規定的事件流包括三個階段:事件捕獲階段、處于目標階段和冒泡階段。首先發生的是事件捕獲,為截獲事件提供了機會。然后是實際的目標接收到事件。最后一個階段是冒泡階段,可以在這個階段對事件作出響應。以簡單的HTML頁面為例,單擊<div>元素會按照下圖順序觸發事件。

在DOM事件流中,實際的目標(<div>元素)在捕獲階段不會接收到事件。這意味著在捕獲階段,事件從document到<html>再到<body>后就停止了。下一個階段是“處于目標”階段,于是事件在<div>上發生,并在事件處理中被看成冒泡階段的一部分。然后冒泡階段發生,事件又傳播回文檔。
多數支持DOM事件流的瀏覽器都實現了一種特定行為;即使“DOM2級事件”規范明確要求捕獲階段不會涉及事件的目標,但Safari、Chrome、Firefox和Opera9.5及更高版本都會在捕獲階段觸發事件對象上的事件。結果,就是有兩個機會在目標對象上面操作事件。

阻止事件冒泡

實驗

<!DOCTYPE html><html lang="en"><head>	<meta charset="UTF-8">	<title></title>	<script type="text/javascript">		function onBtn() {			alert('button');			//cancelBubble(); 阻止事件冒泡		}		//獲取事件對象		function getEvent(){			//如果為ie或chrome			if(window.event){return window.event;}			//針對firefox			func = getEvent.caller; //獲取函數調用者			while(func != null){				var arg0 = func.arguments[0]; //獲取調用者第一個參數				//判斷參數是否為空				if(arg0){					//判斷arg0是否為事件對象				  if((arg0.constructor == Event || arg0.constructor == MouseEvent				    || arg0.constructor == KeyboardEvent)				    ||(typeof(arg0) == "object" && arg0.preventDefault				    && arg0.stopPropagation)){				     return arg0;				   }				}				//獲取func調用者				func = func.caller;			}			return null;		}		//阻止事件冒泡		function cancelBubble() {			event = getEvent();			 // Firefox chrome		  if(event.preventDefault) {  		   		    event.preventDefault();  		    event.stopPropagation(); 		   } else { 		   	//ie 		    event.cancelBubble=true;  		    event.returnValue = false;		   }  		}	</script></head><body onclick="alert('body')">	<div onclick="alert('div');" style="background-color:green">		<button onclick="onBtn()">dsd</button>	</div></body></html>

上面的html代碼執行的事件觸發順序。

默認情況: 依次會彈出 'button' ---》 彈出'div' -----》彈出'body'

如果加上cancelBubble()代碼:只會彈出'button'

以上這篇深入理解JS DOM事件機制就是小編分享給大家的全部內容了,希望能給大家一個參考,也希望大家多多支持武林網。

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 丰顺县| 辽阳县| 横山县| 安国市| 桃园市| 武冈市| 庆城县| 万州区| 乌拉特中旗| 达拉特旗| 称多县| 和龙市| 绥阳县| 乐平市| 亚东县| 东兰县| 新郑市| 固安县| 玉林市| 宿州市| 夏邑县| 建德市| 澎湖县| 漳浦县| 靖西县| 读书| 磐石市| 社旗县| 上犹县| 瑞金市| 日土县| 福安市| 厦门市| 方山县| 昌黎县| 博爱县| 册亨县| 钟祥市| 泸定县| 连山| 乌拉特后旗|