视频1 视频21 视频41 视频61 视频文章1 视频文章21 视频文章41 视频文章61 推荐1 推荐3 推荐5 推荐7 推荐9 推荐11 推荐13 推荐15 推荐17 推荐19 推荐21 推荐23 推荐25 推荐27 推荐29 推荐31 推荐33 推荐35 推荐37 推荐39 推荐41 推荐43 推荐45 推荐47 推荐49 关键词1 关键词101 关键词201 关键词301 关键词401 关键词501 关键词601 关键词701 关键词801 关键词901 关键词1001 关键词1101 关键词1201 关键词1301 关键词1401 关键词1501 关键词1601 关键词1701 关键词1801 关键词1901 视频扩展1 视频扩展6 视频扩展11 视频扩展16 文章1 文章201 文章401 文章601 文章801 文章1001 资讯1 资讯501 资讯1001 资讯1501 标签1 标签501 标签1001 关键词1 关键词501 关键词1001 关键词1501 专题2001
如何使用JS事件代理
2020-11-27 19:37:10 责编:小采
文档


这次给大家带来如何使用JS事件代理,如何使用JS事件代理的注意事项有哪些,下面就是实战案例,一起来看一下。

事件委托(也叫事件代理),其实这个问题也简单,要想弄明白事件委托,我们先要把事件冒泡的机制搞清楚。举个事件冒泡的例子:

<ul>
 <li>点击</li>
</ul>
<script>
 var ul=document.getElementsByTagName('ul')[0];
 var li=document.getElementsByTagName('li')[0];
 ul.addEventListener('click', function(){
 alert('我是ul,我被点击了');
 }, false);
 li.addEventListener('click', function(){
 alert('我是li,我被点击了');
 }, false);
</script>

在这段代码中,当我们点击li的时候出发了li的click事件,但是在这时,ul的click事件也被触发了,这就是事件的冒泡。搞明白这个之后,我们就可以来说事件委托了,既然事件能从子元素(li)冒泡的父元素(ul)身上,那么我们就可以给ul自己加一个click事件,把所有li的事件都委托给了我们的父级(ul)身上,可能到这里有些朋友还是不明白这个事件委托到底有什么用,我们在举一个事件委托的实例来说明一下:

<ul>
 <li>点击1</li>
 <li>点击2</li>
 <li>点击3</li>
 <li>点击4</li>
 <li>点击5</li>
</ul>
<script>
 //使用事件委托的代码
 var ul=document.getElementsByTagName('ul')[0];
 ul.addEventListener('click', function(e){
 alert(e.target.innerHTML);
 }, false);
 //不使用事件委托,循环给li添加click事件
 var li=document.getElementsByTagName('li')
 for(var i=0;i<li.length;i++){
 li[i].onclick=function(){
 alert(this.innerHTML);
 }
 }
</script>

我们以上代码把事件委托给了ul,只给ul增加点击事件,在浏览器中运行点击对应的li会弹出li对应的innerHTML,这个function(e){};中的e这个参数实际上就是当前我们点击li时,系统传给我们的一些事件信息,e.target实际上指的就是当前我们点击的这个li,在这里我们每次弹出的都是当前点击对象的innerHTML,这就是一个简单的事件委托的案例。

而事件委托对于我们优化代码意义是非常大的,我们都知道,频繁的dom操作是非常耗费性能的,现在ul里边是5个li,我们假如不用事件委托实现上面代码所作的事情,就需要用for循环,给每个li都写一个click事件,这样一来dom操作就比较多了,如果是10个li呢,100个甚至更多呢,单不说dom操作影响的性能,li过多for循环自身就会占用大量的事件。如果利用事件委托,既避免了for循环耗费的性能,又省去了繁多的dom操作耗费的性能。

相信看了本文案例你已经掌握了方法,更多精彩请关注Gxl网其它相关文章!

推荐阅读:

Webpack怎样操作缓存

如何使用Bootstrap+WebUploader

下载本文
显示全文
专题