js事件委托(事件代理)

Posted chailug

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了js事件委托(事件代理)相关的知识,希望对你有一定的参考价值。

事件委托
  js中事件冒泡我们知道,子元素身上的事件会冒泡到父元素身上,事件代理就是本来加载子元素身上的事件,加在其父元素身上,其问起产生了,那么多的子元素怎么区分事件本应该是哪个子元素的。 答案就是event对象记录的事件源,他就是发生事件的子元素;
  事件委托的好处?
  1、效率高,比如不用for循环
  2、js新生成的子元素也不用新其添加事件,程序逻辑比较方便

例子1. 页面有个ul包含着4个li,鼠标移动到li上,li背景变成粉色,移出,背景恢复原色。

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>事件委托</title>
</head>
<body>
    <ul id="demo">
        <li>1111111111</li>
        <li>22222222222</li>
        <li>333333333333</li>
        <li>44444444444444444444444</li>
    </ul>
    <button id="btn">新增li</button>
</body>

<script type="text/javascript">
    var oUl = document.getElementById(‘demo‘)
    oUl.onmouseover = function(ev) 
        var ev = ev|| window.event;
        var oLi = ev.srcElement|| ev.target
        console.log(ev)
        console.log(oLi)
        console.log(oLi.nodeName)
        if (oLi.nodeName.toLowerCase() == ‘li‘) 
                oLi.style.background = ‘pink‘
        
        
     
     oUl.onmouseout = function(ev) 
         var ev = ev || window.event;
         var oLi = ev.srcElement||ev.target
         if (oLi.nodeName.toLowerCase() == ‘li‘) 
                oLi.style.background = ‘‘
        
     
    var btn = document.getElementById(‘btn‘)
    btn.onclick=function()
        var newLi = document.createElement(‘li‘)
        newLi.innerHTML = new Date()
        oUl.appendChild(newLi)
    

</script>

</html>

 

以上是关于js事件委托(事件代理)的主要内容,如果未能解决你的问题,请参考以下文章

js中的事件委托或事件代理

JS——事件委托或代理

Js中的事件委托/事件代理

js中的事件委托或是事件代理详解

JS中的事件委托/代理详解

js中的事件委托或事件代理