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

首頁 > 編程 > JavaScript > 正文

JS中事件冒泡和事件捕獲介紹

2019-11-19 18:32:15
字體:
供稿:網(wǎng)友

談起JavaScript的 事件,事件冒泡、事件捕獲、阻止默認(rèn)事件這三個話題,無論是面試還是在平時的工作中,都很難避免。
事件捕獲階段:事件從最上一級標(biāo)簽開始往下查找,直到捕獲到事件目標(biāo)(target)。
事件冒泡階段:事件從事件目標(biāo)(target)開始,往上冒泡直到頁面的最上一級標(biāo)簽。

1、冒泡事件:

事件按照從最特定的事件目標(biāo)到最不特定的事件目標(biāo)(document對象)的順序觸發(fā)。通俗來講就是,就是當(dāng)設(shè)定了多個div的嵌套時;即建立了父子關(guān)系,當(dāng)父div與子div共同加入了onclick事件時,當(dāng)觸發(fā)了子div的onclick事件后,子div進(jìn)行相應(yīng)的js操作,但是父div的onclick事件同樣會被觸發(fā)。

html:

<div> <input type="button" value="測試事件冒泡" /></div>

js:

  var $input = document.getElementsByTagName("input")[0];   var $div = document.getElementsByTagName("div")[0];   var $body = document.getElementsByTagName("body")[0];    $input.onclick = function(e){      this.style.border = "5px solid red"      var e = e || window.e;      alert("red")   }   $div.onclick = function(e){      this.style.border = "5px solid green"      alert("green")   }   $body.onclick = function(e){      this.style.border = "5px solid yellow"      alert("yellow")   }

效果:依次彈出”red“,"green","yellow"。這就是事件冒泡:觸發(fā)button這個元素,卻連同父元素綁定的事件一同觸發(fā)。

2、阻止事件冒泡

如果對input的事件綁定改為:

$input.onclick = function(e){  this.style.border = "5px solid red"  var e = e || window.e;  alert("red")  e.stopPropagation();}

這個時候只會彈出”red“,因?yàn)樽柚沽耸录芭荨?br />

3、事件捕獲:

從頂層元素到目標(biāo)元素或者從目標(biāo)元素到頂層元素,和事件冒泡是一個相反的過程。事件從最不精確的對象(document 對象)開始觸發(fā),然后到最精確(也可以在窗口級別捕獲事件,不過必須由開發(fā)人員特別指定)。

$input.addEventListener("click", function(){  this.style.border = "5px solid red";  alert("red")}, true)$div.addEventListener("click", function(){  this.style.border = "5px solid green";  alert("green")}, true)$body.addEventListener("click", function(){  this.style.border = "5px solid yellow";  alert("yellow")}, true)

這個時候依次彈出”yellow“,"green","red"。這就是事件的捕獲。 

如果把a(bǔ)ddEventListener方法的第三個參數(shù)改成false,則表示只在冒泡的階段觸發(fā),彈出的依次為:”red“,"green","yellow"。這是因?yàn)樵赪3C模型中,任何事件發(fā)生時,先從頂層開始進(jìn)行事件捕獲,直到事件觸發(fā)到達(dá)了事件源元素。然后,再從事件源往上進(jìn)行事件冒泡,直到到達(dá)document。

程序員可以自己選擇綁定事件時采用事件捕獲還是事件冒泡,方法就是綁定事件時通過addEventListener函數(shù),它有三個參數(shù),第三個參數(shù)若是true,則表示采用事件捕獲,若是false,則表示采用事件冒泡。

ele.addEventListener('click',doSomething2,true)
true=捕獲
false=冒泡

以上就是本文的全部內(nèi)容,希望對大家的學(xué)習(xí)有所幫助,也希望大家多多支持武林網(wǎng)。

發(fā)表評論 共有條評論
用戶名: 密碼:
驗(yàn)證碼: 匿名發(fā)表
主站蜘蛛池模板: 新化县| 绥宁县| 邢台县| 长武县| 吉安市| 攀枝花市| 仙桃市| 梁平县| 布拖县| 唐山市| 垫江县| 宁津县| 娱乐| 镇雄县| 长乐市| 都江堰市| 迁西县| 泰顺县| 余庆县| 吉林市| 天长市| 珠海市| 濮阳县| 田东县| 焉耆| 宁武县| 佳木斯市| 三明市| 五原县| 石城县| 辽宁省| 紫阳县| 台州市| 陕西省| 张家港市| 万载县| 星子县| 阳高县| 和田县| 密云县| 蓬安县|