JavaScript事件委托

本文介绍了JavaScript中事件委托的概念及其实现方式,通过对比使用与未使用事件委托的代码示例,展示了事件委托如何提升性能并使新元素自动继承原有事件。
事件委托:对于JavaScript来讲,事件委托又叫做事件代理,意思就是,click,mouseover.mouseout等事件,本来该事件是加在某个元素上,但是却加在其他的元素上处理该事件


原理;利用冒泡原理,把该事件加在父级元素上,执行触发
好处:1、提高性能
                                                        2、新添加的元素还会有之前的事件




例子:
<ul id="ul">
        <li>111111111111111111</li>
        <li>222222222222222222</li>
        <li>333333333333333333</li>
        <li>444444444444444444</li>
</ul>


没有用事件委托:
        window.onload=function(){
                var oUl=document.getElementById("ul");
                var oLi=document.getElementsByTagName("li");
                for(var i=0;i<oLi.length;i++){
                                        oLi[i].onmouseover=function(){
                                                                this.style.background="red";
                                        }
                                            oLi[i].onmouseout=function(){
                                                                this.style.background="yellow";
                                        } 
                    }


}


事件委托:


window.onload=function(){
                    var oUl=document.getElementById("ul");
                    var oLi=oUl.getElementsByTagName("li"); 
                
                        oUl.onmouseover=function(ev){
                                                var ev=ev||window;
                                                var traget=ev.target||ev.scrElement;
                                                if(traget.nodeName.toLowerCase()=="li"){
                                                                                traget.style.background="red";
                                                }
                        }


                        oUl.onmouseout=function(ev){
                                        var ev=ev||window;
                                        var traget=ev.traget||ev.srcElement;
                                        if(traget.nodeName.toLowercase()=="li"){
                                                                        traget.style.background="yellow";
                                                }
                                }
}




添加一个新的元素
<input type="button" id="btn">
<ul id="ul">
        <li>111111111111111111</li>
        <li>222222222222222222</li>
        <li>333333333333333333</li>
        <li>444444444444444444</li>
</ul>


var btn=document.getElementById("btn");
btn.onclick=function(){
                var iNow=5;
                var li=documnet.createElement("li");
                li.innerHtml=iNow*111111111111111111;
                oUl.appendChild(li);
}


没有用事件委托,新添加的li就不存在之前上面我们给li添加的onmouseover和onkouseout,因为for循环已经完成了,新增的li不在for循环里面

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值