亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

JavaScript中事件冒泡機(jī)制示例詳析

 更新時(shí)間:2021年06月08日 11:18:28   作者:來(lái)世做春風(fēng)  
這篇文章主要給大家介紹了關(guān)于JavaScript中事件冒泡機(jī)制的相關(guān)資料,文中詳析介紹了什么是冒泡、冒泡捕獲需要以及冒泡和捕獲的具體區(qū)別,需要的的朋友可以參考下

什么是冒泡?

DOM事件流(event  flow )存在三個(gè)階段:事件捕獲階段、 處于目標(biāo)階段、 事件冒泡階段。

事件捕獲(event  capturing):通俗的理解就是,當(dāng)鼠標(biāo)點(diǎn)擊或者觸發(fā)dom事件時(shí),瀏覽器會(huì)從根節(jié)點(diǎn)開(kāi)始由外到內(nèi)進(jìn)行事件傳播,即點(diǎn)擊了子元素,如果父元素通過(guò)事件捕獲方式注冊(cè)了對(duì)應(yīng)的事件的話,會(huì)先觸發(fā)父元素綁定的事件。

事件冒泡(dubbed  bubbling):與事件捕獲恰恰相反,事件冒泡順序是由內(nèi)到外進(jìn)行事件傳播,直到根節(jié)點(diǎn)。

dom標(biāo)準(zhǔn)事件流的觸發(fā)的先后順序?yàn)椋合炔东@再冒泡,即當(dāng)觸發(fā)dom事件時(shí),會(huì)先進(jìn)行事件捕獲,捕獲到事件源之后通過(guò)事件傳播進(jìn)行事件冒泡。不同的瀏覽器對(duì)此有著不同的實(shí)現(xiàn),IE10及以下不支持捕獲型事件,所以就少了一個(gè)事件捕獲階段,IE11、Chrome 、Firefox、Safari等瀏覽器則同時(shí)存在。

addEventListener()方法

這個(gè)方法設(shè)定一個(gè)事件監(jiān)聽(tīng)器,當(dāng)某一事件發(fā)生通過(guò)設(shè)定的參數(shù)執(zhí)行操作。語(yǔ)法是:

addEventListener(event, function, useCapture)

參數(shù) event 是必須的,表示監(jiān)聽(tīng)的事件,例如 click, touchstart 等,就是之前不加前綴 on 的事件。

參數(shù) function 也是必須的,表示事件觸發(fā)后調(diào)用的函數(shù),可以是外部定義函數(shù),也可以是匿名函數(shù)。

參數(shù) useCapture 是選填的,填true或者false,用于描述事件是冒泡還是捕獲,true表示捕獲,默認(rèn)的false表示冒泡。

移除事件監(jiān)聽(tīng)

如果要移除 addEventListener() 添加的事件監(jiān)聽(tīng),就要使用removeEventListener(),語(yǔ)法是:

removeEventListener(event, function)

參數(shù)與addEventListener()一致。

兼容性

IE 8及更早的版本,和Opera 7.0及更早的版本,不支持 addEventListener() 和 removeEventListener() 方法,他們使用的是一下方法代替:

添加事件:

attachEvent(event, function)

移除事件:

**detachEvent(event, function) **

可以用以下方法解決兼容性問(wèn)題:

if (div1.addEventListener) {
         div1.addEventListener('click', function () {
             console.log("支持")
         });
} else if (div1.attachEvent) {
         div1.attachEvent('onclick', function () {
             console.log("不支持")
         });
}

冒泡和捕獲的具體區(qū)別

HTML

    <div id="div1">
         <div id="div2"></div>
    </div>

JS

<script>
        var div1 = document.getElementById("div1");
        var div2 = document.getElementById("div2");
        div1.addEventListener('click',function(){
            console.log("div1--捕獲階段")
        },true);
        div2.addEventListener('click',function(){
            console.log("div2--捕獲階段")
        },true);
        div1.addEventListener('click',function(){
            console.log("div1--冒泡階段")
        });
        div2.addEventListener('click',function(){
            console.log("div2--冒泡階段")
        });
</script>

輸出結(jié)果(點(diǎn)擊div2的時(shí)候執(zhí)行的結(jié)果)

解決辦法

function stopBubble(e) {
         if (e && e.stopPropagation) {
                e.stopPropagation(); //因此它支持W3C的stopPropagation()方法 
         } else {
             window.event.cancelBubble = true; //否則,我們需要使用IE的方式來(lái)取消事件冒泡 
         }
}

 

總結(jié)

到此這篇關(guān)于JavaScript中事件冒泡機(jī)制的文章就介紹到這了,更多相關(guān)JavaScript事件冒泡內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • js html css實(shí)現(xiàn)復(fù)選框全選與反選

    js html css實(shí)現(xiàn)復(fù)選框全選與反選

    這篇文章主要為大家詳細(xì)介紹了js實(shí)現(xiàn)復(fù)選框全選與反選,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2016-10-10
  • 基于JQuery+HTML+JavaScript實(shí)現(xiàn)地圖位置選取和地址模糊查詢

    基于JQuery+HTML+JavaScript實(shí)現(xiàn)地圖位置選取和地址模糊查詢

    本文詳細(xì)講解了如何使用 JQuery+HTML+JavaScript 實(shí)現(xiàn)移動(dòng)端頁(yè)面中的地圖位置選取功能,本文逐步展示了如何構(gòu)建基本的地圖頁(yè)面,如何通過(guò)點(diǎn)擊地圖獲取經(jīng)緯度和地理信息,以及如何實(shí)現(xiàn)模糊查詢地址并在地圖上標(biāo)注,感興趣的小伙伴跟著小編一起來(lái)看看吧
    2024-07-07
  • 微信小程序下拉框功能的實(shí)例代碼

    微信小程序下拉框功能的實(shí)例代碼

    這篇文章主要介紹了微信小程序下拉框功能的實(shí)例代碼,代碼簡(jiǎn)單易懂,非常不錯(cuò),具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2018-11-11
  • JavaScript中的數(shù)組操作介紹

    JavaScript中的數(shù)組操作介紹

    這篇文章主要介紹了JavaScript中的數(shù)組操作介紹,本文講解了join()、reverse()、sort()、concat()、slice()、splice()等幾個(gè)函數(shù)的操作實(shí)例,需要的朋友可以參考下
    2014-12-12
  • JavaScript常見(jiàn)JSON操作實(shí)例分析

    JavaScript常見(jiàn)JSON操作實(shí)例分析

    這篇文章主要介紹了JavaScript常見(jiàn)JSON操作,簡(jiǎn)單描述了json的概念、常見(jiàn)json類(lèi)型,并結(jié)合實(shí)例形式分析了json的序列化、轉(zhuǎn)換、格式化、解析等相關(guān)操作技巧,需要的朋友可以參考下
    2018-08-08
  • javascript中的五種基本數(shù)據(jù)類(lèi)型

    javascript中的五種基本數(shù)據(jù)類(lèi)型

    在javascript中申明變量使用的關(guān)鍵字都是var,這點(diǎn)與其他的編程語(yǔ)言不盡相同,但是javascript亦含有五種基本的數(shù)據(jù)類(lèi)型(也可以說(shuō)是簡(jiǎn)單數(shù)據(jù)類(lèi)型),它們分別是:Undefined,Null,Boolean,Number和String。還含有一種復(fù)雜數(shù)據(jù)類(lèi)型—Object。這里我們不談復(fù)雜數(shù)據(jù)類(lèi)型
    2015-08-08
  • 微信小程序-詳解數(shù)據(jù)緩存

    微信小程序-詳解數(shù)據(jù)緩存

    每個(gè)微信小程序都可以有自己的本地緩存,本篇文章主要介紹了微信小程序-詳解數(shù)據(jù)緩存,可以通過(guò)函數(shù)可以對(duì)本地緩存進(jìn)行設(shè)置、獲取和清理,有興趣的可以了解一下。
    2016-11-11
  • JavaScript關(guān)于提高網(wǎng)站性能的幾點(diǎn)建議(一)

    JavaScript關(guān)于提高網(wǎng)站性能的幾點(diǎn)建議(一)

    這篇文章主要介紹了JavaScript關(guān)于提高網(wǎng)站性能的幾點(diǎn)建議(一)的相關(guān)資料,非常不錯(cuò),具有參考借鑒價(jià)值,需要的朋友可以參考下
    2016-07-07
  • Javascript連接Access數(shù)據(jù)庫(kù)完整實(shí)例

    Javascript連接Access數(shù)據(jù)庫(kù)完整實(shí)例

    這篇文章主要介紹了Javascript連接Access數(shù)據(jù)庫(kù)的方法,涉及javascript針對(duì)access數(shù)據(jù)庫(kù)的連接、關(guān)閉及增刪改查等常用操作技巧,具有一定參考借鑒價(jià)值,需要的朋友可以參考下
    2015-08-08
  • 用iframe實(shí)現(xiàn)不刷新整個(gè)頁(yè)面上傳圖片的實(shí)例

    用iframe實(shí)現(xiàn)不刷新整個(gè)頁(yè)面上傳圖片的實(shí)例

    下面小編就為大家?guī)?lái)一篇用iframe實(shí)現(xiàn)不刷新整個(gè)頁(yè)面上傳圖片的實(shí)例。小編覺(jué)得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧
    2016-11-11

最新評(píng)論