JS中的事件委托实例浅析


Posted in Javascript onMarch 22, 2018

本文实例讲述了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操作耗费的性能。

PS:关于javascript事件说明可参考本站javascript事件与功能说明大全:http://tools.3water.com/table/javascript_event

希望本文所述对大家JavaScript程序设计有所帮助。

Javascript 相关文章推荐
JavaScript 拖拉缩放效果
Dec 10 Javascript
javascript new一个对象的实质
Jan 07 Javascript
jquery的clone方法应用于textarea和select的bug修复
Jun 26 Javascript
jQuery simplePage+AJAX plus分页插件用法实例
Feb 17 Javascript
CKEditor无法验证的解决方案(js验证+jQuery Validate验证)
May 09 Javascript
基于BootStrap Metronic开发框架经验小结【六】对话框及提示框的处理和优化
May 12 Javascript
jQuery实现的放大镜效果示例
Sep 13 Javascript
jQuery实现移动端Tab选项卡效果
Mar 15 Javascript
Angularjs 与 bower安装和使用详解
May 11 Javascript
vue-cli结合Element-ui基于cropper.js封装vue实现图片裁剪组件功能
Mar 01 Javascript
JS如何把字符串转换成json
Feb 21 Javascript
js+cavans实现图片滑块验证
Sep 29 Javascript
jquery的 filter()方法使用教程
Mar 22 #jQuery
p5.js实现斐波那契螺旋的示例代码
Mar 22 #Javascript
基于JavaScript实现幸运抽奖页面
Jul 05 #Javascript
Vue封装一个简单轻量的上传文件组件的示例
Mar 21 #Javascript
基于vue-video-player自定义播放器的方法
Mar 21 #Javascript
基于iScroll实现内容滚动效果
Mar 21 #Javascript
JS中的回调函数实例浅析
Mar 21 #Javascript
You might like
如何对PHP程序中的常见漏洞进行攻击(上)
2006/10/09 PHP
PHP中使用localhost连接Mysql不成功的解决方法
2014/08/20 PHP
php使用递归计算文件夹大小
2014/12/24 PHP
PHP用正则匹配form表单中所有元素的类型和属性值实例代码
2017/02/28 PHP
ThinkPHP中create()方法自动验证实例
2017/04/26 PHP
PHP 中TP5 Request 请求对象的实例详解
2017/07/31 PHP
PHP实现的字符串匹配算法示例【sunday算法】
2017/12/19 PHP
php pdo连接数据库操作示例
2019/11/18 PHP
PHP利用curl发送HTTP请求的实例代码
2020/07/09 PHP
PHP序列化和反序列化深度剖析实例讲解
2020/12/29 PHP
TopList标签和JavaScript结合两例
2007/08/12 Javascript
jQuery使用height()获取高度需要注意的地方
2014/12/13 Javascript
jQuery实现拖动调整表格单元格大小的代码实例
2015/01/13 Javascript
jQuery EasyUI封装简化操作
2016/09/18 Javascript
jQuery封装placeholder效果实现方法,让低版本浏览器支持该效果
2017/07/08 jQuery
详解Vue2.0 事件派发与接收
2017/09/05 Javascript
JavaScript 自定义事件之我见
2017/09/25 Javascript
微信小程序tabBar用法实例详解
2017/12/04 Javascript
三步实现ionic3点击退出app程序
2019/09/17 Javascript
如何手写一个简易的 Vuex
2020/10/10 Javascript
Python库urllib与urllib2主要区别分析
2014/07/13 Python
python基于ID3思想的决策树
2018/01/03 Python
pyqt5的QComboBox 使用模板的具体方法
2018/09/06 Python
python语言基本语句用法总结
2019/06/11 Python
使用Python和百度语音识别生成视频字幕的实现
2020/04/09 Python
Python3 socket即时通讯脚本实现代码实例(threading多线程)
2020/06/01 Python
移动端html5 meta标签的神奇功效
2016/01/06 HTML / CSS
iRobot官网:改变生活的家用机器人品牌
2016/09/20 全球购物
英国设计师泳装、沙滩装和比基尼在线精品店:Beach Cafe
2019/08/28 全球购物
模具毕业生推荐信
2014/02/15 职场文书
暑期培训随笔感言
2014/03/10 职场文书
2014年大学团支部工作总结
2014/12/02 职场文书
2014年大学宣传部工作总结
2014/12/19 职场文书
先进党支部申报材料
2014/12/24 职场文书
MIME类型中application/xml与text/xml的区别介绍
2022/01/18 HTML / CSS
windows系统安装配置nginx环境
2022/06/28 Servers