這篇文章帶給大家的內容是關於JavaScript冒泡和捕獲的知識介紹(附程式碼),有一定的參考價值,有需要的朋友可以參考一下,希望對你有幫助。
JS 冒泡和捕獲是怎麼回事
冒泡和捕獲是指在元素上的事件被觸發的時候,js 傳遞事件的兩種方向,或者說過程。
前言:
如,有這麼一個頁面和js 方法
Less: 我用less寫的,如果沒有less 環境,可以無視這段。
.level { padding: 50px 80px; } .level-template(@level: 1, @color: #fff){ background-color: darken( @color , 5% * @level); } #lv1{ .level-template(1)} #lv2{ .level-template(2)} #lv3{ .level-template(3)} #lv4{ .level-template(4)}
HTML
<div> <div> <div> <div> </div> </div> </div> </div>
JS
function $(id) { return document.getElementById(id); } window.onload = () => { $('lv1').addEventListener("click",()=>{console.log('lv1')},true); $('lv2').addEventListener("click",()=>{console.log('lv2')},true); $('lv3').addEventListener("click",()=>{console.log('lv3')},true); }; // 上面的 () => {} 为 ES6 的匿名方法的定义方式 // 等同于 function () { console.log('lv1') }
上面的js 做的事:
在頁面載入的時候,給三個div添加click 監聽方法,自己被點擊的時候會在console 中輸出自己的id 值。
頁的結構是這樣的 lv1 包含 lv2,lv2 又包含 lv3,當點選 lv3 的時候,其實也點選了 lv2 與 lv1,因為 lv3 在 lv2 內部,點選 lv3 的時候,自然也點選了lv2 和 lv1,也就是說,點選 lv3 的時候,會觸發三個 click 事件。
至於這三個事件觸發的順序,就是所謂的 冒泡 和 捕捉。
事件觸發經過的三個階段:
-
擷取階段:先由文件的根節點
document
往事件觸發對象,從外向內捕捉事件物件; - 定位目標:尋找到目標事件位置(事發地),觸發事件;
- 冒泡階段:再從目標事件位置往文件的根節點方向回溯,從內向外冒泡事件物件。
1. 捕獲階段
如上面的例子,在 lv3 被點擊的時候,js 會從文件的最上層開始,由外向內尋找點擊事件的起源,也就是 lv3。那麼這個由外而內的過程就是 lv1 --> lv2 --> lv3,這三個 p 的 click 事件依序被觸發。
這個觸發的方向就是捕捉的方向。
2. 冒泡階段
在找到被點擊的lv3 之後,事件向上傳遞,過程是 lv3 --> lv2 --> lv1,此時依序觸發 lv3、lv2 、lv1 的 click 事件,這個由內向外的觸發過程就稱為冒泡
再回看一下最常用的事件綁定方法的格式:
element.addEventListener(event, function, useCapture)
這裡面,useCapture 是個布林值,用於定義事件是在冒泡階段觸發,還是在捕獲階段觸發,預設值是 false,代表在冒泡時觸發。
此時你就會知道上面那個例子裡定義的click 方法是在 捕獲階段 執行,那麼返回的結果就是
lv1 lv2 lv3
如果最上面的例子,onload 內容是這樣的
window.onload = () => { $('lv1').addEventListener("click",()=>{console.log('lv1')},false); $('lv2').addEventListener("click",()=>{console.log('lv2')},false); $('lv3').addEventListener("click",()=>{console.log('lv3')},false); };
那麼也就是說,click
事件在冒泡階段
觸發,回傳的結果就是
lv3 lv2 lv1
總結
以上是JavaScript冒泡與捕捉的知識介紹(附程式碼)的詳細內容。更多資訊請關注PHP中文網其他相關文章!

JavaScript在現實世界中的應用包括服務器端編程、移動應用開發和物聯網控制:1.通過Node.js實現服務器端編程,適用於高並發請求處理。 2.通過ReactNative進行移動應用開發,支持跨平台部署。 3.通過Johnny-Five庫用於物聯網設備控制,適用於硬件交互。

我使用您的日常技術工具構建了功能性的多租戶SaaS應用程序(一個Edtech應用程序),您可以做同樣的事情。 首先,什麼是多租戶SaaS應用程序? 多租戶SaaS應用程序可讓您從唱歌中為多個客戶提供服務

本文展示了與許可證確保的後端的前端集成,並使用Next.js構建功能性Edtech SaaS應用程序。 前端獲取用戶權限以控制UI的可見性並確保API要求遵守角色庫

JavaScript是現代Web開發的核心語言,因其多樣性和靈活性而廣泛應用。 1)前端開發:通過DOM操作和現代框架(如React、Vue.js、Angular)構建動態網頁和單頁面應用。 2)服務器端開發:Node.js利用非阻塞I/O模型處理高並發和實時應用。 3)移動和桌面應用開發:通過ReactNative和Electron實現跨平台開發,提高開發效率。

JavaScript的最新趨勢包括TypeScript的崛起、現代框架和庫的流行以及WebAssembly的應用。未來前景涵蓋更強大的類型系統、服務器端JavaScript的發展、人工智能和機器學習的擴展以及物聯網和邊緣計算的潛力。

JavaScript是現代Web開發的基石,它的主要功能包括事件驅動編程、動態內容生成和異步編程。 1)事件驅動編程允許網頁根據用戶操作動態變化。 2)動態內容生成使得頁面內容可以根據條件調整。 3)異步編程確保用戶界面不被阻塞。 JavaScript廣泛應用於網頁交互、單頁面應用和服務器端開發,極大地提升了用戶體驗和跨平台開發的靈活性。

Python更适合数据科学和机器学习,JavaScript更适合前端和全栈开发。1.Python以简洁语法和丰富库生态著称,适用于数据分析和Web开发。2.JavaScript是前端开发核心,Node.js支持服务器端编程,适用于全栈开发。

JavaScript不需要安裝,因為它已內置於現代瀏覽器中。你只需文本編輯器和瀏覽器即可開始使用。 1)在瀏覽器環境中,通過標籤嵌入HTML文件中運行。 2)在Node.js環境中,下載並安裝Node.js後,通過命令行運行JavaScript文件。


熱AI工具

Undresser.AI Undress
人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover
用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool
免費脫衣圖片

Clothoff.io
AI脫衣器

AI Hentai Generator
免費產生 AI 無盡。

熱門文章

熱工具

MinGW - Minimalist GNU for Windows
這個專案正在遷移到osdn.net/projects/mingw的過程中,你可以繼續在那裡關注我們。 MinGW:GNU編譯器集合(GCC)的本機Windows移植版本,可自由分發的導入函式庫和用於建置本機Windows應用程式的頭檔;包括對MSVC執行時間的擴展,以支援C99功能。 MinGW的所有軟體都可以在64位元Windows平台上運作。

SublimeText3 Linux新版
SublimeText3 Linux最新版

DVWA
Damn Vulnerable Web App (DVWA) 是一個PHP/MySQL的Web應用程序,非常容易受到攻擊。它的主要目標是成為安全專業人員在合法環境中測試自己的技能和工具的輔助工具,幫助Web開發人員更好地理解保護網路應用程式的過程,並幫助教師/學生在課堂環境中教授/學習Web應用程式安全性。 DVWA的目標是透過簡單直接的介面練習一些最常見的Web漏洞,難度各不相同。請注意,該軟體中

Atom編輯器mac版下載
最受歡迎的的開源編輯器

Safe Exam Browser
Safe Exam Browser是一個安全的瀏覽器環境,安全地進行線上考試。該軟體將任何電腦變成一個安全的工作站。它控制對任何實用工具的訪問,並防止學生使用未經授權的資源。