事件委托原理

186 阅读1分钟

事件委托

​ 原理:事件委托是利用事件流的特征解决一些开发需求的知识技巧。如果为父容器绑定事件,那么所有的子元素默认情况下都能触发这个事件,不管这个子元素是 已存在,还是将来创建的,这里是复用事件冒泡的原理,为父容器绑定事件,将来所有子元素都会事件冒泡给这个父容器。这种将事件绑定给父容器的做法让子元素也能响应事件--就叫做事件委托

​ 优点:给父级元素加事件(可以提高性能)

​ 实现:事件对象.target可以获得真正触发事件的元素

<!DOCTYPE html>
<html lang="en"><head>
    <meta charset="UTF-8" />
    <meta http-equiv="X-UA-Compatible" content="IE=edge" />
    <meta name="viewport" content="width=device-width, initial-scale=1.0" />
    <title>Document</title>
    <style>
        ul {
            background-color: #ccc;
        }
    </style>
</head><body>
    <button>添加li元素</button>
    <ul>
        <li>我是第1个小li</li>
        <li>我是第2个小li</li>
        <li>我是第3个小li</li>
        <li>我是第4个小li</li>
        <li>我是第5个小li</li>
    </ul>
​
    <script>
        let button = document.querySelector('button')
        let ul = document.querySelector('ul')
            // 为父元素绑定事件,进行事件委托
        button.addEventListener('click', function() {
            let li = document.createElement('li')
            li.innerText = '我是新来的'
            li.classList.add('bgc')
            ul.appendChild(li)
        })
​
        ul.addEventListener('click', function(e) {
            // 判断所点击的子元素
            if (e.target.classList.contains('bgc')) {
                e.target.style.backgroundColor = 'orange'
            }
​
            e.target.style.color = 'red'
        })
    </script>
</body></html>

\