1. 程式人生 > >js委託事件-addEventListeners(冒泡方向)

js委託事件-addEventListeners(冒泡方向)

JQuery中live()、delegate()、on()事件都能給新增元素繫結事件,原理就是用了事件委託。

例項:

給id為div的元素繫結一個click委託,如果冒泡上來的元素是P元素就會執行alert("xxx");

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>
<div id="div">
   <p>11111</p>
    <p>2222</p>
</div>
<button id="btn">xxxx</button>
<script>
    document.getElementById("div").addEventListener("click",function(e){
        if(e.target.nodeName=="P"){
            alert("xxx")
        }
    })
    document.getElementById("btn").onclick=function(){
        var p = document.createElement("p");
        p.innerHTML="333";
        document.getElementById("xx").appendChild(p);
    }
</script>
</body>
</html>

冒泡方式分為2種,一種是由子元素向上冒泡,一種是由父元素向下冒泡

在使用addEventListeners的時候有第三個引數true和flase;預設是flase,由子元素向上冒泡

當我們設定為true的時候就會由父元素向下冒泡

例項:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>
<div id="id1" style="width:200px; height:200px; position:absolute; top:100px; left:100px; background-color:blue; z-index:4">
    <div id="id2" style="width:100px; height:100px; top:20px; left:70px; background-color:green; "></div>
</div>
<script>
    document.getElementById("id1").addEventListener('click',function(){
        console.log("id1");
    },true)
    document.getElementById("id2").addEventListener('click',function(){
        console.log("id2");
    },true)
</script>
</body>
</html>