JavaScript 事件捕獲
事件捕獲對於很多朋友比較陌生,實際編寫程式碼中應用較少。
大家普遍比較熟悉的是事件冒泡,它應用廣泛,帶來了很多便利。
對於知識點的掌握不要太功利,有些當前用不到的知識,可能在未來某個時刻發揮舉足輕重作用。
就如同生活中交朋友,也不要太勢力,誠實待人才是關鍵,誰知道未來誰會真正幫助你。
JavaScript事件的傳播分為兩個過程:
(1).事件捕獲階段。
(2).事件冒泡階段。
關於事件冒泡可以參閱JavaScript 事件冒泡一章節。
事件捕獲階段在事件冒泡階段之前,圖示如下:
特別說明:下圖來源於一外文網站,在此特別感謝。
圖示分析說明如下:
(1).圖中數字順序就是事件傳播的順序。
(2).事件捕獲先於事件冒泡。
(3).事件捕獲恰好與事件冒泡相反,它從頂層祖先元素開始,直到事件觸發元素。
下面再通過程式碼例項演示一下事件捕獲階段的存在。
首先看一下addEventListener的語法結構:
[JavaScript] 純文字檢視 複製程式碼target.addEventListener(type, listener, useCapture)
很少朋友會關注第三個引數的真正作用,只是將它預設設定為false即可。
此引數規定是在捕獲階段觸發事件還是在冒泡階段觸發事件,false表示在冒泡階段觸發事件。
正是由於工作中頻繁使用事件冒泡,絕少使用事件捕獲,從而甚至感覺第三個引數值固定為false一般。
程式碼例項如下:
[HTML] 純文字檢視 複製程式碼執行程式碼<!DOCTYPE html> <html> <head> <meta charset="utf-8"> <meta name="author" content="http://www.softwhy.com/" /> <title>螞蟻部落</title> <style type="text/css"> *{ margin:0px; padding:0px; } #box{ width:400px; height:400px; background-color:blue; } #middle{ height:200px; width:200px; background-color:green; } #inner{ height:50px; width:50px; background-color:red; } </style> <script> window.onload=function(){ let obox=document.getElementById("box"); let omiddle=document.getElementById("middle"); let oinner=document.getElementById("inner"); obox.addEventListener("click",function(){console.log("box")},true); omiddle.addEventListener("click",function(){console.log("middle")},true); oinner.addEventListener("click",function(){console.log("inner")},true); } </script> </head> <body> <div id="box"> <div id="middle"> <div id="inner"></div> </div> </div> </body> </html>
點選最內側的紅色div測試效果,程式碼執行效果截圖如下:
addEventListener方法的第三個引數為true,說明在捕獲階段觸發事件。
點選inner元素後,如果是事件冒泡觸發,那麼事件由觸發元素向頂層元素傳播。
而事件捕獲則恰好相反,所以列印的id值順序是從外到內。
相關文章
- JavaScript事件捕獲冒泡與捕獲JavaScript事件
- javascript事件冒泡和事件捕獲型別JavaScript事件型別
- JavaScript事件冒泡、事件捕獲和阻止預設事件JavaScript事件
- javascript事件捕獲是什麼意思JavaScript事件
- Javascript中的事件冒泡與捕獲JavaScript事件
- javascript的事件監聽與捕獲和冒泡JavaScript事件
- 事件冒泡 和 事件捕獲事件
- JS事件(事件冒泡和事件捕獲)JS事件
- JavaScript高階程式設計筆記 事件冒泡和事件捕獲JavaScript程式設計筆記事件
- Javascript事件模型系列(二)事件的捕獲-冒泡機制及事件委託機制JavaScript事件模型
- 關於js事件冒泡和事件捕獲JS事件
- 理解js的事件冒泡和事件捕獲JS事件
- 事件的捕獲、冒泡、委託事件
- javascript捕獲組如何使用JavaScript
- 記錄Javascript 異常捕獲JavaScript
- 關於 JavaScript 錯誤捕獲JavaScript
- JS中的事件順序(事件捕獲與冒泡)JS事件
- 捕獲silverlight滾輪事件事件
- 如何捕獲jvm的退出事件啊?JVM事件
- WPF捕獲事件即使這個事件被標記為Handled事件
- 捕獲Android文字中連結點選事件Android事件
- jQuery捕獲jQuery
- Keypress - 捕獲鍵盤輸入的JavaScript庫JavaScript
- 事件冒泡、事件捕獲、DOM0級事件處理程式、DOM2級事件處理程式事件
- 前端JavaScript 常見的報錯及異常捕獲前端JavaScript
- 生動詳細解釋javascript的冒泡和捕獲JavaScript
- 錯誤捕獲
- 事件溯源模式:分離事件的發生和捕獲兩種不同時間 - verraes事件模式
- Spirit帶你徹底瞭解事件捕獲和冒泡機制事件
- php 正規表示式捕獲組與非捕獲組PHP
- javascript如何獲取事件目標物件JavaScript事件物件
- WIN32 SDK - 捕獲滑鼠離開和滯留等事件 (轉)Win32事件
- 捕獲 React 異常React
- 捕獲cookie的值Cookie
- iOS異常捕獲iOS
- Swift速成:捕獲列表Swift
- 管理捕獲程式——流
- 【Mysql】捕獲線上sqlMySql