JavaScript冒泡默認(rèn)事件是Web前端中常用的概念之一,主要用于網(wǎng)頁事件的傳播機(jī)制,這個機(jī)制可以讓我們更好的利用事件和控制網(wǎng)頁的行為。下面,我們來詳細(xì)了解一下JavaScript的冒泡事件機(jī)制以及如何應(yīng)用。
冒泡事件傳播機(jī)制是指:在模型的冒泡階段,從最具體的點最先接收到事件,然后逐級向上冒泡,直到文檔區(qū)域最后接收到事件,這就是冒泡流。這個概念比較抽象,我們可以通過舉例來說明。比如我們在頁面中添加如下HTML代碼:
<div id="father"> <div id="son"></div> </div>
同時,給父容器和子容器綁定點擊事件:
var father = document.getElementById("father"); var son = document.getElementById("son"); father.onclick = function(){console.log("father clicked")}; son.onclick = function(){console.log("son clicked")};
假設(shè)我們點擊了子容器,就會發(fā)現(xiàn)控制臺輸出了 "son clicked", 接著又輸出了"father clicked"。那么是為什么呢?這是因為JavaScript事件處理會按照事件冒泡的順序來進(jìn)行,先執(zhí)行子容器的點擊事件,再執(zhí)行父容器的點擊事件,而事件流正是沿著冒泡流來傳播的。
當(dāng)然,冒泡事件機(jī)制的應(yīng)用遠(yuǎn)遠(yuǎn)不止這些,我們可以通過冒泡機(jī)制來實現(xiàn)事件委托,提高程序的性能。比如我們可以為頁面上每一個按鈕綁定一個點擊事件,然后通過冒泡事件機(jī)制,當(dāng)任何一個按鈕被點擊時,只需要一個事件處理函數(shù)就可以完成全部按鈕的點擊事件處理,避免了重復(fù)綁定點擊事件的問題。
除了冒泡事件,JavaScript還有一個默認(rèn)事件機(jī)制,與冒泡事件相比,有所區(qū)別。默認(rèn)事件是指在用戶操作需要運(yùn)行操作或跳轉(zhuǎn)頁面時所執(zhí)行的事件,比如鏈接的默認(rèn)事件是跳轉(zhuǎn)到鏈接地址,按鈕默認(rèn)事件時提交表單等。在JavaScript中可以通過preventDefault()方法來阻止默認(rèn)事件的執(zhí)行。
下面我們來通過一個例子來說明。假設(shè)我們在鏈接上添加了一個點擊事件:
var link = document.getElementById('mylink'); link.onclick = function(e) { console.log('link clicked...'); e.preventDefault();//阻止默認(rèn)事件 };
當(dāng)用戶點擊鏈接時,除了會觸發(fā)綁定的點擊事件外,還會默認(rèn)跳轉(zhuǎn)至鏈接地址,但是在這里,我們使用 preventDefault() 方法阻止了默認(rèn)事件的執(zhí)行,那么網(wǎng)頁就不會跳轉(zhuǎn)到鏈接地址了。
通過以上幾個例子,我們對JavaScript的冒泡事件和默認(rèn)事件的機(jī)制有了一些基本的認(rèn)識,正是這些機(jī)制為我們提供了更多控制網(wǎng)頁的方式,讓我們在Web前端開發(fā)中可以輕松地實現(xiàn)各種復(fù)雜的功能。