博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
JS事件委托
阅读量:4978 次
发布时间:2019-06-12

本文共 2224 字,大约阅读时间需要 7 分钟。

事件委托:事件就是onclick,onmouseover,onmouseout,等就是事件,委托呢,就是让别人来做,这个事件本来是加在某些元素上的,然而你却加到别人身上来做,完成这个事件。原理:利用冒泡原理将事件加到父级上,促发执行效果。

好处:1.提高性能

  • aaaaaaaa
  • bbbbbbbb
  • cccccccc
window.onload = function(){  var oUl = document.getElementById("ul");  var aLi = oUl.getElementsByTagName("li");  for(var i=0; i
window.onload = function(){  var oUl = document.getElementById("ul");  var aLi = oUl.getElementsByTagName("li");/*这里要用到事件源:event 对象,事件源,不管在哪个事件中,只要你操作的那个元素就是事件源。ie:window.event.srcElement标准下:event.targetnodeName:找到元素的标签名*/  oUl.onmouseover = function(ev){    var ev = ev || window.event;    var target = ev.target || ev.srcElement;    //alert(target.innerHTML);    if(target.nodeName.toLowerCase() == "li"){    target.style.background = "red";    }  }  oUl.onmouseout = function(ev){    var ev = ev || window.event;    var target = ev.target || ev.srcElement;    //alert(target.innerHTML);    if(target.nodeName.toLowerCase() == "li"){    target.style.background = "";    }  }}

好处2,新添加的元素还会有之前的事件。

我们还拿这个例子看,但是我们要做动态的添加li。点击button动态添加li

如:

  • aaaaaaaa
  • bbbbbbbb
  • cccccccc

 不用事件委托我们会这样做:

window.onload = function(){  var oUl = document.getElementById("ul");  var aLi = oUl.getElementsByTagName("li");  var oBtn = document.getElementById("btn");  var iNow = 4;  for(var i=0; i
 

这样做我们可以看到点击按钮新加的li上面没有鼠标移入事件来改变他们的背景颜色。

因为点击添加的时候for循环已经执行完毕。

那么我们用事件委托的方式来做。就是html不变

 
window.onload = function(){  var oUl = document.getElementById("ul");  var aLi = oUl.getElementsByTagName("li");  var oBtn = document.getElementById("btn");  var iNow = 4;  oUl.onmouseover = function(ev){    var ev = ev || window.event;    var target = ev.target || ev.srcElement;    //alert(target.innerHTML);    if(target.nodeName.toLowerCase() == "li"){    target.style.background = "red";    }  }  oUl.onmouseout = function(ev){    var ev = ev || window.event;    var target = ev.target || ev.srcElement;    //alert(target.innerHTML);    if(target.nodeName.toLowerCase() == "li"){    target.style.background = "";    }  }  oBtn.onclick = function(){    iNow ++;    var oLi = document.createElement("li");    oLi.innerHTML = 1111 *iNow;    oUl.appendChild(oLi);  }}
 
 

转载于:https://www.cnblogs.com/muzilimm/p/6935195.html

你可能感兴趣的文章
Matlab2014的下载和安装激活过程
查看>>
【转】Android游戏开发:如何实现爆炸效果
查看>>
"SOAP WebService " 和 "RESTful WebService" 的定义分别是什么???
查看>>
linux三大文件处理工具(grep/sed/awk)
查看>>
dubbo源码分析 之 服务本地暴露
查看>>
python 连接presto
查看>>
git dev 分支merge到master
查看>>
JAVA线程安全总结(转载)
查看>>
python进程池剖析(三)
查看>>
基于 geojson数据类型面转线Transforms Polygons and MultiPolygons to LineStrings.
查看>>
日历 练习
查看>>
用css 实现凹陷的线条
查看>>
hadoop2.6.0实践:A03 例子验证
查看>>
Grails连接mysql数据库
查看>>
input-file 部分手机不能拍照问题
查看>>
C#面向对象编程
查看>>
ES6 随记(1)-- let 与 const
查看>>
Windows Server 2003中的网络负载平衡技术的实现方法
查看>>
Android 二维码 生成和识别(附Demo源码)
查看>>
[dt]世纪历史长河年代表
查看>>