国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 編程 > JavaScript > 正文

詳解javascript事件冒泡

2019-11-20 10:49:42
字體:
來源:轉載
供稿:網友

事件是javascript中的核心內容之一,在對事件的應用中不可避免的要涉及到一個重要的概念,那就是事件冒泡,在介紹事件冒泡之前,先介紹一下另一個重要的概念事件流:
一.什么是事件流:
文檔對象模型(DOM)是一個樹形結構,可以形象的用下圖表示。

如果一個html元素觸發事件,那么這個事件就會在DOM樹中的觸發節點和根節點之間按照一定的順序傳播,所有經過的節點都會接收到被觸發的事件,這個傳播過程被稱之為事件流。按照事件的傳播順序,可以將其分為兩類,一種是事件冒泡,一種是事件捕獲,這里就涉及到本章要介紹的主題了:
1.事件冒泡:
所謂的時間冒泡就是當一個元素觸發一個事件,事件會像是水泡一樣,從觸發元素向它的所有父節點傳播,一直到根節點都會接收到此事件,如果父元素中注冊了相應的事件處理函數,那么盡管事件在子節點觸發的,在父元素上注冊的事件處理函數同樣會被觸發。例如在上面圖示中,如果觸發a元素的onclick事件,那么它的父元素p、document和widow都會接收到此事件,并且如果在相應的父元素注冊有時間處理函數,那么此事件處理函數將會執行,看一段代碼實例:

<html><head><meta charset="utf-8"/><title>事件冒泡簡單介紹</title><script type="text/javascript">window.onload=function(){ var table=document.getElementById("mytable"); table.onclick=function(e){ var event=e||window.event; target=event.srcElement||event.target; alert(target.innerHTML); }}</script></head><body><table width="400" border="1" id="mytable"><tr> <td>武林網</td> <td>武林網</td> <td>武林網</td></tr><tr> <td>武林網</td> <td>武林網</td> <td>武林網</td></tr><tr> <td>武林網</td> <td>武林網</td> <td>武林網</td></tr></table></body></html>

以上代碼的目的是,當點擊相應的單元格的時候就會彈出對應單元格中的內容。但是在上面的實現中并不是為每一個單元格注冊onclick事件處理函數,而是將onclick事件處理函數注冊于單元格的父元素table上,當點擊單元格的時候會觸發onclick事件,事件還會從從事件對象向上傳播,而table元素恰好有注冊的onclick事件處理函數,這個時候就會執行此處理函數,當然這里會設置到傳遞事件對象參數的問題。所有的瀏覽器都支持事件冒泡。二.事件捕獲:
事件捕獲和事件冒泡恰好相反,當點擊一個元素的時候,事件傳播的方向是從根元素到觸發元素,IE瀏覽器并不支持,為了跨瀏覽器支持,所以默認情況下一般都是使用冒泡型事件處理模型。
2.javascript阻止事件冒泡代碼
事件冒泡在某些場景非常的有用,但是有時候也是必須要阻止,下面是一段能夠兼容所有主流瀏覽器的阻止事件冒泡的實例代碼。
代碼實例:

function stopBubble(e) {  if(e&&e.stopPropagation)  {  e.stopPropagation();  }  else {  window.event.cancelBubble=true;  } }

以上代碼可以阻止事件冒泡,下面對代碼做一下簡單注釋:
二、代碼注釋:

  • 1.function stopBubble(e) {},此函數用來阻止事件冒泡,參數是個事件對象。
  • 2. if(e&&e.stopPropagation){e.stopPropagation();},判斷是否支持stopPropagation,如果支持就使用e.stopPropagation()。stopPropagation()函數IE10和IE10以下瀏覽器不支持。
  • 3.window.event.cancelBubble=true,當前IE瀏覽器使用這個可以阻止事件冒泡。

以上就是關于javascript事件冒泡的詳細介紹,希望對大家的學習有所幫助。

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 报价| 中江县| 阳新县| 施甸县| 浮梁县| 根河市| 陵川县| 昌黎县| 寻甸| 东乌| 即墨市| 应用必备| 连城县| 抚州市| 绥江县| 陆良县| 青川县| 重庆市| 南康市| 富平县| 镇远县| 灌阳县| 青州市| 霍邱县| 包头市| 亚东县| 当阳市| 呼图壁县| 墨脱县| 如东县| 嘉黎县| 东丰县| 玉溪市| 台南市| 辉南县| 关岭| 六盘水市| 万山特区| 安福县| 长宁区| 昌平区|