dom事件流(事件冒泡+事件捕獲)

來(lái)源

在它們成為標(biāo)準(zhǔn)之前,Netscape和微軟各自不同地實(shí)現(xiàn)了它們。Netscape選擇實(shí)現(xiàn)了捕獲事件流,微軟則實(shí)現(xiàn)了冒泡事件流。幸運(yùn)的是,W3C決定組合使用這兩種方法,并且大多數(shù)新瀏覽器都遵循這兩種事件流方式。

w3c標(biāo)準(zhǔn)dom事件流圖解

w3c標(biāo)準(zhǔn)dom事件流

DOM事件流

將事件分為三個(gè)階段:捕獲階段、目標(biāo)階段、冒泡階段。先調(diào)用捕獲階段的處理函數(shù),其次調(diào)用目標(biāo)階段的處理函數(shù),最后調(diào)用冒泡階段的處理函數(shù)。

捕獲階段的函數(shù):

<!DOCTYPE html>
<html>
<head lang="en">
    <meta charset="UTF-8">
    <title>事件捕獲</title>
</head>
<body>
    <div id="e">
        <input id="btn" type="button" value="按鈕">
    </div>
    <script type="text/javascript">
        var e = document.getElementById('e');
        var btn = document.getElementById('btn');
        e.addEventListener('click',function(){
            alert('你點(diǎn)擊了div');
        },true);
        btn.addEventListener('click',function(){
            alert('你點(diǎn)擊了button');
        },true);
    </script>
</body>
</html>

冒泡階段的函數(shù):

<!DOCTYPE html>
<html>
<head lang="en">
    <meta charset="UTF-8">
    <title>事件冒泡</title>
</head>
<body>
    <div id="e">
        <input id="btn" type="button" value="按鈕">
    </div>
    <script type="text/javascript">
        var e = document.getElementById('e');
        var btn = document.getElementById('btn');
        e.onclick = function (){
            alert("你點(diǎn)擊了div");
        };
        btn.onclick = function(){
            alert("你點(diǎn)擊了button");
        }
    </script>
</body>
</html>

區(qū)別

捕獲是由Natscape公司提出的,一般是addEventListener('click', () => {})事件
冒泡是微軟提出的,一般直接是dom.onclick = () => {};

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容