JS事件委托

事件委托:
   

1、什么是事件委托: 什么是事件呢?onclick,onmouseover,onmouseout,onfocus等就是事件 什么是委托呢?就是自己做的事情委托给别人来做,也就是本来事件时加在自己身上,你却把事件加在别人身上,来解决这个事件

优点:提高性能:

Demo1:
给每个li 绑定了一个鼠标经过事件
 window.οnlοad=function(){
        var oDemo  = document.getElementById('ul');
        var aLi = oDemo.getElementsByTagName('li');

        for(var i=0; i<aLi.length; i++){
            aLi[i].onmouseover = function(){
                this.style.background="red";
            }
            aLi[i].onmouseout = function(){
                this.style.background="";
            }
        }

    }

上面案例反应一个问题,当我们在开发的时候for循环多个鼠标经过li出现的事件,会影响性能
下面我们就讲如何使用事件委托来解决问题:
注意:
     这里涉及到事件源: 事件源是event对象下的,不管在那个事件中,只要你操作的那个元素就是事件源;
     IE : window.event.srcElement;
     标准下 : event.target;
     nodeName: 元素的标签名;

oDemo.οnmοuseοver=function(ev){
            var oEv = ev || window.event;
            var target = oEv.target || oEv.srcElement;
            if(target.nodeName.toLowerCase() == 'li'){
                target.style.background="red";
            }
}
oDemo.οnmοuseοut=function(ev){
            var oEv = ev || window.event;
            var target = oEv.target || oEv.srcElement;
            if(target.nodeName.toLowerCase() == 'li'){
                target.style.background="";
            }
}


优点二新添加的元素 还有事件

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
        "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en">
<head>
    <meta http-equiv="Content-Type" content="text/html;charset=UTF-8">
    <title>Document</title>
    <style>
        body{
            margin: 0;
        }
    </style>
</head>
<body>
<button id="btn1">添加</button>
<ul id="ul">
    <li>1</li>
    <li>2</li>
    <li>3</li>
    <li>4</li>
    <li>5</li>
</ul>
<script>
window.οnlοad=function(){
        var oDemo  = document.getElementById('ul');
        var aLi = oDemo.getElementsByTagName('li');
        var oBtn = document.getElementById('btn1');
        var iNow=5;

        oDemo.οnmοuseοver=function(ev){
            var oEv = ev || window.event;
            var target = oEv.target || oEv.srcElement;
            if(target.nodeName.toLowerCase() == 'li'){
                target.style.background="red";
            }
        }
        oDemo.οnmοuseοut=function(ev){
            var oEv = ev || window.event;
            var target = oEv.target || oEv.srcElement;
            if(target.nodeName.toLowerCase() == 'li'){
                target.style.background="";
            }
        }
        //新添加的元素 还有事件
        oBtn.οnclick=function(){
            iNow++;
            var oLi = document.createElement('li');
            oLi.innerHTML=1 * iNow;
            oDemo.appendChild(oLi);
        }
    }
</script>
</body>
</html>






发布了37 篇原创文章 · 获赞 27 · 访问量 7万+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章