js點擊事件的執(zhí)行過程實例分析【冒泡與捕獲】
本文實例講述了js點擊事件的執(zhí)行過程。分享給大家供大家參考,具體如下:
js事件對象event包括很多事件類型,這里用onclick事件為例,探討一下在js事件捕獲機(jī)制和冒泡機(jī)制下的執(zhí)行過程,以及如何阻止事件的捕獲和冒泡。
首先看下當(dāng)我們點擊一個元素后,瀏覽器的執(zhí)行過程。
1,當(dāng)某個元素綁定的事件被觸發(fā)時,這時瀏覽器就會從頂級document元素發(fā)出一個事件流
2,這個事件流順著dom層級,一層一層向下找,直到遇到了觸發(fā)事件的目標(biāo)元素,這個查找的過程是捕獲階段
說明:捕獲階段,在查找每一層dom時,遇到相同的事件默認(rèn)不執(zhí)行,元素的事件默認(rèn)在冒泡階段執(zhí)行
3,到達(dá)目標(biāo)元素后會觸發(fā)目標(biāo)元素綁定的事件函數(shù),也就是目標(biāo)元素事件函數(shù)處理階段
4,在處理過目標(biāo)元素事件后,在順著dom層級一層一層向上查找,這時對應(yīng)dom上如果有相同的事件,默認(rèn)會被觸發(fā),冒泡階段
實例:
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <meta http-equiv="X-UA-Compatible" content="ie=edge"> <title>Document</title> </head> <body> <div class="box" style="width:300px;height:300px;background:green;" οnclick="firstClick()"> parent <div class="child" οnclick="secondClick()">child <div class="button" onclick = "thirdClick()">提交</div> </div> </div> <script> var divs=document.querySelectorAll("div");//獲取所有的divs function firstClick(){ alert('firstClick') } function secondClick(){ alert('secondClick') } function thirdClick(){ alert('thirdClick') } function fn0(){ alert("box"); } function fn1(){ alert("child"); } function fn2(){ alert("but"); } divs[0].addEventListener("click",fn0,false); divs[1].addEventListener("click",fn1,false); divs[2].addEventListener("click",fn2,false); </script> </body> </html>
說明:
addEventListener有三個參數(shù),最后一個參數(shù)是決定元素事件的觸發(fā)階段,默認(rèn)是false,在冒泡階段執(zhí)行,設(shè)置為true,則在捕獲階段執(zhí)行。
在dom上直接綁定的事件會在addEventListenter監(jiān)聽的事件執(zhí)行之后執(zhí)行。
阻止冒泡:
onclick = function(e){ e=e||window.event; if(e.stopPropagation){ e.stopPropagation();//其它瀏覽器 }else{ e.cancelBubble=true;//IE瀏覽器 } }
阻止捕獲:判斷e.target
function fn0(e){ if(e.target == divs[0]){ alert("fn0"); } } divs[0].addEventListener("click",fn0,true);
感興趣的朋友可以使用在線HTML/CSS/JavaScript代碼運行工具:http://tools.jb51.net/code/HtmlJsRun測試上述代碼運行效果。
更多關(guān)于JavaScript相關(guān)內(nèi)容感興趣的讀者可查看本站專題:《JavaScript操作DOM技巧總結(jié)》、《JavaScript頁面元素操作技巧總結(jié)》、《JavaScript事件相關(guān)操作與技巧大全》、《JavaScript查找算法技巧總結(jié)》、《JavaScript數(shù)據(jù)結(jié)構(gòu)與算法技巧總結(jié)》、《JavaScript遍歷算法與技巧總結(jié)》及《JavaScript錯誤與調(diào)試技巧總結(jié)》
希望本文所述對大家JavaScript程序設(shè)計有所幫助。
- javascript 中事件冒泡和事件捕獲機(jī)制的詳解
- javascript事件捕獲機(jī)制【深入分析IE和DOM中的事件模型】
- js事件監(jiān)聽機(jī)制(事件捕獲)總結(jié)
- JavaScript事件冒泡機(jī)制原理實例解析
- Javascript 事件冒泡機(jī)制詳細(xì)介紹
- javascript事件冒泡詳解和捕獲、阻止方法
- js冒泡、捕獲事件及阻止冒泡方法詳細(xì)總結(jié)
- js事件冒泡、事件捕獲和阻止默認(rèn)事件詳解
- JavaScript中捕獲/阻止捕獲、冒泡/阻止冒泡方法
- JS中綁定事件順序(事件冒泡與事件捕獲區(qū)別)
- javascript事件冒泡和事件捕獲詳解
- js事件機(jī)制----捕獲與冒泡機(jī)制實例分析
相關(guān)文章
當(dāng)$.get返回失敗后調(diào)用fail方法示例詳解
這篇文章主要介紹了當(dāng)$.get返回失敗后,調(diào)用fail方法,本文給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下2023-12-12js頁面跳轉(zhuǎn)的問題(跳轉(zhuǎn)到父頁面、最外層頁面、本頁面)
js頁面跳轉(zhuǎn):本頁面跳轉(zhuǎn),上一層頁面跳轉(zhuǎn),最外層的頁面跳轉(zhuǎn),下面為大家大家分享下不同頁面之家的跳轉(zhuǎn)問題,感興趣的朋友可以學(xué)習(xí)下2013-08-08javascript實現(xiàn)仿銀行密碼輸入框效果的代碼
這篇文章通過實例代碼給大家介紹了javascript實現(xiàn)仿銀行密碼輸入框效果,代碼簡單易懂,非常不錯,具有一定的參考借鑒價值,需要的朋友參考下吧2007-12-12