JavaScript 事件冒泡
JavaScript事件傳播分為兩個階段:
(1).事件捕獲階段。
(2).事件冒泡階段。
考慮到文章篇幅問題,本文只介紹事件冒泡。
關於事件捕獲可以參閱參閱JavaScript 事件捕獲一章節。
大家應該都見過水中的氣泡,從水底逐漸上浮到水面,事件也具有此傳遞現象。
當事件在一個元素上觸發後,事件會逐級傳播給先輩元素,這就是所謂的事件冒泡現象。
圖示如下:
下面以點選連結<a>觸發click事件為例作為一下分析:
(1).點選連結<a>觸發click事件。
(2).事件向上冒泡傳遞給它的父元素<p>。
(3).然後再有<p>元素冒泡傳遞給document,再傳遞給window。
傳播過程圖示如下:
特別說明:並不是所有的事件都有冒泡現象,比如如下幾個:
(1).blur事件。
(2).focus事件。
(3).load事件。
(4).unload事件。
程式碼演示如下:
[HTML] 純文字檢視 複製程式碼執行程式碼<!doctype html> <html> <head> <meta charset="utf-8"> <meta name="author" content="http://www.softwhy.com/" /> <title>螞蟻部落</title> <style> #box{ width:150px; height:100px; background-color:blue; } p{ width:120px; height:60px; background-color:green; } </style> <script> window.onload=function(){ let count=0; let obox = document.getElementById("box"); let oshow = document.getElementById("show"); obox.onclick = function () { oshow.innerHTML=++count; } } </script> </head> <body> <div id="box"> <p><a href="#" id="link">螞蟻部落</a></p> </div> <div id="show"></div> </body> </html>
程式碼分析如下:
(1).a與p元素均未註冊click事件處理函式。
(2).但是點選a與p元素都可以觸發div元素的click事件,這是因為事件由於事件冒泡現象,都會傳遞到div元素,於是就可以執行對應的事件處理函式。
利用事件冒泡可以實現JavaScript 委託功能,委託就是將自己的事情委託給別人去做。
程式碼例項如下:
[HTML] 純文字檢視 複製程式碼執行程式碼<!DOCTYPE html> <html> <head> <meta charset=" utf-8"> <meta name="author" content="http://www.softwhy.com/" /> <title>螞蟻部落</title> <style type="text/css"> ul{ list-style:none; } </style> <script> window.onload=function(){ let obox=document.getElementById("box"); let oshow=document.getElementById("show"); let obt=document.getElementById("bt"); obox.onclick=function(ev){ let target=ev.target; oshow.innerHTML=target.innerHTML; } obt.onclick=function(){ let newLi=document.createElement("li"); newLi.innerHTML="螞蟻部落五"; obox.appendChild(newLi); } } </script> </head> <body> <div id="show"></div> <ul id="box"> <li>螞蟻部落一</li> <li>螞蟻部落二</li> <li>螞蟻部落三</li> <li>螞蟻部落四</li> </ul> <input type="button" id="bt" value="新增新行"/> </body> </html>
上面程式碼具有兩個主要特點:
(1).點選li元素,會將其內容寫入頂部div中。
(2).點選新增的li元素,也會將其內容寫入頂部div中。
如果沒有事件冒泡,想要點選li元素獲取其中的內容,需要在每一個li元素註冊事件處理函式。
現在只要將事件處理函式註冊在ul元素上即可,同樣道理,新增li元素也具有同樣的特點,否則新增li元素後,還需要為其註冊事件處理函式才能點選獲取其內容。
相關文章
- JavaScript阻止事件冒泡JavaScript事件
- JavaScript 阻止事件冒泡程式碼例項JavaScript事件
- JavaScript事件捕獲冒泡與捕獲JavaScript事件
- Javascript中的事件冒泡與捕獲JavaScript事件
- JavaScript和JQuery的滑鼠mouse事件冒泡處理JavaScriptjQuery事件
- 事件的冒泡事件
- 前端學習程式碼例項-JavaScript阻止事件冒泡前端JavaScript事件
- stopPropagation() 阻止事件冒泡事件
- JQuery6:事件冒泡jQuery事件
- 關於js事件冒泡和事件捕獲JS事件
- zepto繫結事件改變冒泡事件流事件
- 理解js的事件冒泡和事件捕獲JS事件
- 原生js如何阻止事件冒泡JS事件
- 事件的捕獲、冒泡、委託事件
- JS中的事件順序(事件捕獲與冒泡)JS事件
- 梳理下常見的不冒泡事件事件
- vue的事件冒泡 最詳細解釋版本Vue事件
- JavaScript事件JavaScript事件
- JavaScript 事件JavaScript事件
- JavaScript resize 事件JavaScript事件
- JavaScript mouseup 事件JavaScript事件
- JavaScript mouseover 事件JavaScript事件
- JavaScript mousedown 事件JavaScript事件
- JavaScript focus 事件JavaScript事件
- JavaScript reset 事件JavaScript事件
- JavaScript blur 事件JavaScript事件
- JavaScript invalid 事件JavaScript事件
- JavaScript input 事件JavaScript事件
- JavaScript keyup 事件JavaScript事件
- JavaScript submit 事件JavaScriptMIT事件
- JavaScript change 事件JavaScript事件
- JavaScript mouseleave 事件JavaScript事件
- JavaScript mousemove 事件JavaScript事件
- JavaScript keypress 事件JavaScript事件
- JavaScript keydown 事件JavaScript事件
- JavaScript select 事件JavaScript事件
- JavaScript contextmenu 事件JavaScriptContext事件
- JavaScript dblclick 事件JavaScript事件