事件委托

事件委托就是利用事件冒泡,只指定一个事件处理程序,就可以管理某一类型的所有事件。

<!DOCTYPE html>
<html>
<head>
    <title></title>
    <meta charset="utf-8">
</head>
<body>
    <div id = "div1">
        <a href = "http..." id = "link1">某连接</a>
        <a href = "http..." id = "link2">某连接</a>
        <a href = "http..." id = "link3">某连接</a>
        <a href = "http..." id = "link4">某连接</a>

        <p id = "p1">激活</p>
        <p id = "p2">取消</p>
    </div>
    <div id = "div2">
        <p id = "p3">取消</p>
        <p id = "p4">取消</p>
    </div>
    <script type="text/javascript">
        //基本事件绑定
// var bth = document.getElementById('btn1')
// bth.addEventListener('click', function (event) {
//     console.log('clicked')
// })
//事件委托就是利用事件冒泡,只指定一个事件处理程序,就可以管理某一类型的所有事件。
//封装绑定函数
function bindEvent(elem, type, fn) {
    elem.addEventListener(type, fn)
}

var div1 = document.getElementById('div1')
bindEvent(div1, 'click', function(e) {
    e.preventDefault() //阻止默认行为
    alert('clicked')
})

//冒泡事件
var p1 = document.getElementById('p1')
bindEvent(p1, 'click', function(e) {
    e.stopPropagation()
    alert('激活')
})
var body = document.body
bindEvent(body, 'click', function(e) {
    alert('取消')
})


//事件代理
    </script>


</body>
</html>

事件代理实例,选项卡

<!DOCTYPE html>
<!DOCTYPE html>
<html>
<head>
    <meta charset="utf-8">
    <title></title>
    <style type="text/css">
    *{margin:0;padding:0;}
    </style>
</head>
<body>
    <ul id= "mylist">
        <li id="list1">1</li>
        <li id="list2">2</li>
        <li id="list3">3</li>
        <li id="list4">4</li>
        <li id="list5">5</li>
    </ul>

</body>
</html>

<script type="text/javascript">
    var list = document.getElementById('mylist');
    var listchild= document.getElementsByTagName('li');
    for(var i=0; i<listchild.length; i++) {
        listchild[i].addEventListener('click', function() {
            this.style.background = 'red';
        })
    }
</script>

绑定不同事件

<!DOCTYPE html>
<!DOCTYPE html>
<html>
<head>
    <meta charset="utf-8">
    <title></title>
    <style type="text/css">
    *{margin:0;padding:0;}
    </style>
</head>
<body>
    <ul id= "mylist">
        <li id="list1">1</li>
        <li id="list2">2</li>
        <li id="list3">3</li>
        <li id="list4">4</li>
        <li id="list5">5</li>
    </ul>

</body>
</html>
<script type="text/javascript">
    var list = document.getElementById('mylist');
    list.addEventListener('click', function(event) {
        event = event || window.event;
        var target = event.target || event.srcElement;
        switch(target.id) {
            case "list1" : alert('list1');
                    break;
            case "list2" : alert('list2');
                    break;
            case "list3" : alert('list3');
                    break;
            case "list4" : alert('list4');
                    break;
            case "list5" : alert('list5');
                    break;
        }
    });
</script>
<!DOCTYPE html>
<html>

<head>
    <meta charset=utf-8" />
</head>

<body>
    <table id="table1">
        <tr><td>1</td></tr>
        <tr><td>2</td></tr>
        <tr><td>3</td></tr>
    </table>
</body>

</html>
<script type="text/javascript">
    function bindEvent(elem,type,fn){
        elem.addEventListener(type,fn)
    }
    var table1 = document.getElementById("table1")
    bindEvent(table1,'click',function(e){
        alert(e.target.innerText);
    })
</script>
原文地址:https://www.cnblogs.com/sarah-wen/p/10823876.html