js事件托管/委托

什么是事件托管/事件委托
利用 事件冒泡 原理,只指定 一个事件处理程序,就可以管理 同一类型 的所有事件。

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>
	<ol id="ol">
	        <li>目标一</li>
	        <li>目标二</li>
	        <li>目标三</li>
	        <li>目标四</li>
	        <li>目标五</li>
	        <li>目标六</li>
	        <li>目标七</li>
	        <li>目标八</li>
	        <li>目标九</li>
	        <li>目标十</li>
    </ol>
    <script type="text/javascript">
    //不使用事件托管
	var  li=document.getElementsByTagName("li");
	for(var i=0;i<li.length;i++){
            li[i].addEventListener("click",function () { //10个li的“click”事件,需要10个事件监听器,分配10份内存;
                this.style.backgroundColor = "yellowgreen";
            });
        }

	//利用事件冒泡原理,在ol上代理所有li的“click”事件
	var ol = document.getElementById("ol");
         ol.addEventListener("click",function (e) {
         		if(e.target.parentNode==this){	//e.target点击到的元素,this为事件绑定的元素(ol),				
         		//判断点击到的元素(目标一~目标十)的父节点是不是ol,防止触发父级元素的点击事件
             			e.target.style.backgroundColor = "yellowgreen";
             			console.log(e.target.innerHTML);
            		 }
        })
      </script>

这里是引用
总结事件委托的优缺点

- 优点

  1. 减少事件注册,节省内存。例如上面代码,只指定 ol的处理程序,即可管理所有所有li的“click”事件;
  2. 简化了dom节点更新时,相应事件的更新。
    - 缺点
  3. 利用事件冒泡的原理,不支持不冒泡的事件;
  4. 层级过多,冒泡过程中,可能会被某层阻止掉。
  5. 理论上委托会导致浏览器频繁调用处理函数,虽然很可能不需要处理。所以建议就近委托,比如在ol上代理li,而不是在document上代理li。
  6. 把所有事件都用代理就可能会出现事件误判。比如,在document中代理了所有button的click事件,另外的人在引用改js时,可能不知道,造成单击button触发了两个click事件。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值