事件委托(事件代理)概述

事件委托(事件代理)概述

  • 什么是事件委托(事件代理)

事件委托(事件代理)是基于Js冒泡原理,把本来加在子元素身上的事件,加在了其父级身上。
通过event对象里记录的“事件源”,查找发生事件的真正子元素
获取事件源的方法存在兼容性问题,老IE浏览器是 window.event.srcElement,其他浏览器是 event.target

  • 事件委托(事件代理)的优点

    (1)可以大量节省内存占用,减少事件注册
    (2)可以方便地动态添加和修改元素,不需要因为元素的改动而修改事件绑定

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

html文件:

<ul id="ul1">
     <li>111</li>
     <li>222</li>
     <li>333</li>
     <li>444</li>
 </ul>

js文件:

//js写法
 <script type="text/javascript">
     window.onload = function(){
         var oUl = document.getElementById('ul1');                
         oUl.onmouseover = function(ev){
             var ev = ev || window.event;
             var target = ev.srcElement || ev.target;
             target .style.background = 'red';                    
         }
          
        oUl.onmouseout = function(ev){
            var ev = ev || window.event;
            var target = ev.srcElement || ev.target;
            target .style.background = '';                    
        }  
    }         
 </script>
//jq写法
  $("#ul1").on('mouseover',function(ev){
      var ev = ev || window.event;
      var target = ev.target || ev.srcElement;
      if(target.nodeName.toLowerCase() == 'li'){
          target.style.background = "red";
      }
  });
    
  $("#ul1").on('mouseout',function(ev){
       var ev = ev || window.event;
       var target = ev.target || ev.srcElement;
       if(target.nodeName.toLowerCase() == 'li'){
          target.style.background = "";
       }
  });
  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值