日韩黑丝制服一区视频播放|日韩欧美人妻丝袜视频在线观看|九九影院一级蜜桃|亚洲中文在线导航|青草草视频在线观看|婷婷五月色伊人网站|日本一区二区在线|国产AV一二三四区毛片|正在播放久草视频|亚洲色图精品一区

分享

JS addEventListener函數(shù)第三個(gè)參數(shù)useCapture使用說(shuō)明

 昵稱(chēng)10504424 2015-04-24

簡(jiǎn)介

“DOM2級(jí)事件”定義了兩個(gè)方法,用于處理指定和刪除事件處理程序的操作:addEventListener() 和 removeEventListener()。

public override function addEventListener(type:String, listener:Function, useCapture:Boolean = false):void

他們都接受3個(gè)參數(shù):要處理的事件名、作為事件處理程序的函數(shù)和一個(gè)布爾值。最后一個(gè)布爾值參數(shù)如果是true,表示在事件捕獲階段調(diào)用事件處理程序;如果是false,表示在事件冒泡階段調(diào)用事件處理程序。

使用

1.事件添加

addEventListener 可以在一個(gè)元素上多次添加事件。

復(fù)制代碼
var oDiv = document.getElementById("div1");

oDiv.addEventListener("click",
function() {
    alert(this.id);
},
false);

oDiv.addEventListener("click",
function() {
    alert("clicked me");
},
false);
復(fù)制代碼

點(diǎn)擊oDiv節(jié)點(diǎn)后,先輸出節(jié)點(diǎn)id“div1”,再輸出“clicked me”。

2.事件移除

addEventListener() 添加的事件處理程序只能使用 removeEventListener() 來(lái)移除;移除時(shí)傳入的參數(shù)與添加處理程序時(shí)使用的參數(shù)相同。這也就意味著通過(guò) addEventListener() 添加的匿名函數(shù)將無(wú)法移除。

復(fù)制代碼
var oDiv = document.getElementById("div1");

oDiv.addEventListener("click",
function() {
    alert(this.id);
},
false);

oDiv.removeEventListener("click",
function() { 
    alert(this.id);
},
false); // 無(wú)效
復(fù)制代碼

雖然 removeEventListener() 看似使用了相同的參數(shù),但是實(shí)際上傳入的那個(gè)是另一個(gè)完全不同的函數(shù)。所以如果想正確的移除事件,寫(xiě)法如下所示。

復(fù)制代碼
var oDiv = document.getElementById("div1");

var handler = function() {
    alert(this.id);
}

oDiv.addEventListener("click", handler, false);

oDiv.removeEventListener("click", handler, false); // 有效
復(fù)制代碼

討論

這里我們主要討論 useCapture 參數(shù)的用法。首先看一段代碼。

復(fù)制代碼
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Document</title>
</head>
<body>
    <div id="div1" style="background: blue;width: 100px; height: 100px;">
        <div id="div2" style="background: red;width: 70px; height: 70px;">
            <div id="div3" style="background: yellow;width: 50px; height: 50px;"></div>
        </div>
    </div>
    <script type="text/javascript">
        var oDiv1 = document.getElementById('div1'),
            oDiv2 = document.getElementById('div2'),
            oDiv3 = document.getElementById('div3');

        oDiv1.addEventListener('click', showBlue, true);
        oDiv2.addEventListener('click', showRed, false);
        oDiv3.addEventListener('click', showYellow, true);

        function showBlue(){ //藍(lán)
            alert("blue");
        }

        function showRed(){ //
            alert("red");
        }

        function showYellow(){//
            alert("yellow");
        }
    </script>
</body>
</html>
復(fù)制代碼

點(diǎn)擊div3之后,過(guò)程分為三個(gè)階段:

捕獲階段: 外-->里 在div1處檢測(cè)useCapture屬性為true,即事件捕獲階段會(huì)觸發(fā)事件,所以會(huì)執(zhí)行程序,輸出“blue”。在div2處檢測(cè)useCapture屬性為false,即事件冒泡階段才會(huì)觸發(fā),所以不會(huì)執(zhí)行程序。
目標(biāo)階段: 目標(biāo)到div3處,發(fā)現(xiàn)div3就是鼠標(biāo)點(diǎn)擊的節(jié)點(diǎn), 所以這里是目標(biāo)階段。若有事件處理程序,則執(zhí)行該程序,輸出“yellow”。這里不論 useCapture 為 true 還是 false。
冒泡階段: 里-->外 在div2處檢測(cè)useCapture屬性為false,即事件冒泡階段才會(huì)觸發(fā),所以會(huì)執(zhí)行程序,輸出“red”。在div1處檢測(cè)useCapture屬性為true,即事件捕獲階段會(huì)觸發(fā)事件,所以不會(huì)執(zhí)行程序。

程序的運(yùn)行結(jié)果為:“blue”,“yellow”,“red”。

綠色通道:好文要頂

    本站是提供個(gè)人知識(shí)管理的網(wǎng)絡(luò)存儲(chǔ)空間,所有內(nèi)容均由用戶(hù)發(fā)布,不代表本站觀(guān)點(diǎn)。請(qǐng)注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購(gòu)買(mǎi)等信息,謹(jǐn)防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請(qǐng)點(diǎn)擊一鍵舉報(bào)。
    轉(zhuǎn)藏 分享 獻(xiàn)花(0

    0條評(píng)論

    發(fā)表

    請(qǐng)遵守用戶(hù) 評(píng)論公約

    類(lèi)似文章 更多