addEventListener()第三個(gè)參數(shù)useCapture (Boolean)詳細(xì)解析
舉例
<div id="div1">
<div id="div2">
<div id="div3">
<div id="div4">
</div>
</div>
</div>
</div>
如果在 d3 上點(diǎn)擊鼠標(biāo),事件流是這樣的:
捕獲階段 在 div1 處檢測(cè)是否有 useCapture 為 true 的事件處理程序,若有,則執(zhí)行該程序,然后再同樣地處理 div2。
目標(biāo)階段 在 div3 處,發(fā)現(xiàn) div3 就是鼠標(biāo)點(diǎn)擊的節(jié)點(diǎn),所以這里為目標(biāo)階段,若有事件處理程序,則執(zhí)行該程序,這里不論 useCapture 為 true 還是 false。
冒泡階段 在 div2 處檢測(cè)是否有 useCapture 為 false 的事件處理程序,若有,則執(zhí)行該程序,然后再同樣地處理 div1。
addEventListener 有三個(gè)參數(shù):第一個(gè)參數(shù)表示事件名稱(不含 on,如 "click");第二個(gè)參數(shù)表示要接收事件處理的函數(shù);第三個(gè)參數(shù)為 useCapture,本文就講解它。
<div id="outDiv">
<div id="middleDiv">
<div id="inDiv">請(qǐng)?jiān)诖它c(diǎn)擊鼠標(biāo)。</div>
</div>
</div>
<div id="info"></div>
var outDiv = document.getElementById("outDiv");
var middleDiv = document.getElementById("middleDiv");
var inDiv = document.getElementById("inDiv");
var info = document.getElementById("info");
outDiv.addEventListener("click", function () { info.innerHTML += "outDiv" + "<br>"; }, false);
middleDiv.addEventListener("click", function () { info.innerHTML += "middleDiv" + "<br>"; }, false);
inDiv.addEventListener("click", function () { info.innerHTML += "inDiv" + "<br>"; }, false);
上述是我們測(cè)試的代碼,根據(jù) info 的顯示來(lái)確定觸發(fā)的順序,有三個(gè) addEventListener,而 useCapture 可選值為 true 和 false,所以 2*2*2,可以得出 8 段不同的程序。
•全為 false 時(shí),觸發(fā)順序?yàn)椋篿nDiv、middleDiv、outDiv;
•全為 true 時(shí),觸發(fā)順序?yàn)椋簅utDiv、middleDiv、inDiv;
•outDiv 為 true,其他為 false 時(shí),觸發(fā)順序?yàn)椋簅utDiv、inDiv、middleDiv;
•middleDiv 為 true,其他為 false 時(shí),觸發(fā)順序?yàn)椋簃iddleDiv、inDiv、outDiv;
•……
最終得出如下結(jié)論:
•true 的觸發(fā)順序總是在 false 之前;
•如果多個(gè)均為 true,則外層的觸發(fā)先于內(nèi)層;
•如果多個(gè)均為 false,則內(nèi)層的觸發(fā)先于外層。
- Javascript 的addEventListener()及attachEvent()區(qū)別分析
- addEventListener 的用法示例介紹
- window.addEventListener來(lái)解決讓一個(gè)js事件執(zhí)行多個(gè)函數(shù)
- document.addEventListener使用介紹
- JS在IE和FF下attachEvent,addEventListener學(xué)習(xí)筆記
- 事件綁定之小測(cè)試 onclick && addEventListener
- javascript attachEvent和addEventListener使用方法
- 詳解addEventListener的三個(gè)參數(shù)之useCapture
- 講兩件事:1.this指針的用法小探. 2.ie的attachEvent和firefox的addEventListener在事件處理上的區(qū)別
- addEventListener()與removeEventListener()解析
相關(guān)文章
JavaScript中的分號(hào)插入機(jī)制詳細(xì)介紹
這篇文章主要介紹了JavaScript中的分號(hào)插入機(jī)制詳細(xì)介紹,本文講解JavaScript中各種情況下的分號(hào)插入機(jī)制,需要的朋友可以參考下2015-02-02
js對(duì)象內(nèi)部訪問(wèn)this修飾的成員函數(shù)示例
這篇文章主要介紹了js對(duì)象內(nèi)部訪問(wèn)this修飾的成員函數(shù)示例,需要的朋友可以參考下2014-04-04
JavaScript學(xué)習(xí)筆記整理_用于模式匹配的String方法
下面小編就為大家?guī)?lái)一篇JavaScript學(xué)習(xí)筆記整理_用于模式匹配的String方法。小編覺得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧2016-09-09
js關(guān)于字符長(zhǎng)度限制的問(wèn)題示例探討
字符長(zhǎng)度限制在某些特殊的使用場(chǎng)合還是比較實(shí)用的,下面為大家用示例探討下,感興趣的朋友可以參考下2014-01-01
對(duì)JavaScript客戶端應(yīng)用編程的一些建議
這篇文章主要介紹了對(duì)JavaScript客戶端應(yīng)用編程的一些建議,主要針對(duì)MVC框架框架的一些相關(guān)使用問(wèn)題,需要的朋友可以參考下2015-06-06
關(guān)于JavaScript的URL.createObjectURL()的使用方法
這篇文章主要介紹了關(guān)于URL.createObjectURL()的使用方法,使用createObjectURL可以節(jié)省性能并更快速,只不過(guò)需要在不使用的情況下手動(dòng)釋放內(nèi)存,還不清楚的朋友一起來(lái)看看吧2023-04-04
js四舍五入數(shù)學(xué)函數(shù)round使用實(shí)例
這篇文章主要介紹了js四舍五入數(shù)學(xué)函數(shù)round使用實(shí)例,需要的朋友可以參考下2014-05-05

