欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

深入理解JS DOM事件機(jī)制

 更新時(shí)間:2016年08月06日 09:48:40   投稿:jingxian  
下面小編就為大家?guī)硪黄钊肜斫釰S DOM事件機(jī)制。小編覺得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧

1、事件流

html 元素觸發(fā)事件的順序。

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

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

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

阻止事件冒泡

實(shí)驗(yàn)

<!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; //獲取函數(shù)調(diào)用者
			while(func != null){
				var arg0 = func.arguments[0]; //獲取調(diào)用者第一個(gè)參數(shù)
				//判斷參數(shù)是否為空
				if(arg0){
					//判斷arg0是否為事件對象
				  if((arg0.constructor == Event || arg0.constructor == MouseEvent
				    || arg0.constructor == KeyboardEvent)
				    ||(typeof(arg0) == "object" && arg0.preventDefault
				    && arg0.stopPropagation)){
				     return arg0;
				   }
				}
				//獲取func調(diào)用者
				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代碼執(zhí)行的事件觸發(fā)順序。

默認(rèn)情況: 依次會彈出 'button' ---》 彈出'div' -----》彈出'body'

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

以上這篇深入理解JS DOM事件機(jī)制就是小編分享給大家的全部內(nèi)容了,希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。

相關(guān)文章

  • 如何在javascript 中使用 xmlHttpRequest 發(fā)送 POST 請求

    如何在javascript 中使用 xmlHttpRequest 發(fā)送 POST

    本文將通過不同的示例解釋如何使用JavaScript代碼在AJAX編程中發(fā)送 XMLHttpRequest post 請求,本文通過實(shí)例代碼給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友參考下吧
    2023-07-07
  • JavaScript獲取FCK編輯器信息的具體方法

    JavaScript獲取FCK編輯器信息的具體方法

    這篇文章介紹了JavaScript獲取FCK編輯器信息的實(shí)例代碼,有需要的朋友可以參考一下
    2013-07-07
  • 使用JS獲取當(dāng)前地理位置的2種方法舉例

    使用JS獲取當(dāng)前地理位置的2種方法舉例

    這篇文章主要給大家介紹了關(guān)于使用JS獲取當(dāng)前地理位置的2種方法,獲取當(dāng)前位置在實(shí)際場景中非常有用,比如定位用戶的位置,為其推薦周邊的商家和服務(wù)等,需要的朋友可以參考下
    2023-11-11
  • 通過示例徹底搞懂js閉包

    通過示例徹底搞懂js閉包

    下面小編就為大家?guī)硪黄ㄟ^示例徹底搞懂js閉包。小編覺得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧
    2017-08-08
  • javascript 實(shí)現(xiàn)map集合

    javascript 實(shí)現(xiàn)map集合

    本文給大家分享的是個(gè)人項(xiàng)目中需要的一個(gè)小功能,當(dāng)時(shí)經(jīng)過一番度娘才實(shí)現(xiàn),現(xiàn)在從項(xiàng)目中拿出來,分享給大家,需要的小伙伴快來參考下吧。
    2015-04-04
  • el-select數(shù)據(jù)過多懶加載的解決(loadmore)

    el-select數(shù)據(jù)過多懶加載的解決(loadmore)

    這篇文章主要介紹了el-select數(shù)據(jù)過多懶加載的解決(loadmore),小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧
    2019-05-05
  • JavaScript中的惰性載入函數(shù)及優(yōu)勢

    JavaScript中的惰性載入函數(shù)及優(yōu)勢

    這篇文章主要介紹了JavaScript中的惰性載入函數(shù)及優(yōu)勢,本文通過實(shí)例代碼給大家介紹的非常詳細(xì),具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2020-02-02
  • js實(shí)現(xiàn)3D旋轉(zhuǎn)相冊

    js實(shí)現(xiàn)3D旋轉(zhuǎn)相冊

    這篇文章主要為大家詳細(xì)介紹了js實(shí)現(xiàn)3D旋轉(zhuǎn)相冊,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2020-08-08
  • javascript 調(diào)用其他頁面的js函數(shù)或變量的腳本

    javascript 調(diào)用其他頁面的js函數(shù)或變量的腳本

    web開發(fā)的時(shí)候,有時(shí)候需要使用其他頁面上寫好的javasript函數(shù)、變量。如彈出窗口需要使用父窗口中的函數(shù),框架1需要使用框架2中的函數(shù)。
    2008-05-05
  • javascript實(shí)現(xiàn)tab切換的兩個(gè)實(shí)例

    javascript實(shí)現(xiàn)tab切換的兩個(gè)實(shí)例

    這篇文章主要介紹了javascript實(shí)現(xiàn)tab切換的兩個(gè)實(shí)例,是對之前方法原理的進(jìn)一步延伸,需要深入了解的同學(xué)可以參考一下
    2015-11-11

最新評論