JS实现为动态添加的元素增加事件功能示例【基于事件委托】


Posted in Javascript onMarch 21, 2018

本文实例讲述了JS实现为动态添加的元素增加事件功能。分享给大家供大家参考,具体如下:

我们在日常开发中有时会通过js创建一些元素,但是如果使用原始的for循环给创建的节点添加事件的方法往往行不通:

<!DOCTYPE html>
<html lang="en">
<head>
 <meta charset="UTF-8">
 <title>3water.com js动态添加事件</title>
</head>
<body>
 <ul id="out-ul">
  <li class="out-li">123</li>
  <li class="out-li">123</li>
  <li class="out-li">123</li>
 </ul>
 <button id="btn">添加</button>
 <script>
  document.getElementById('btn').addEventListener('click',function(){
   var htmlFragment='<li>我是新增的li</li>';
   var addLi=document.createElement('li');
   addLi.innerHTML=htmlFragment;
   outUl.appendChild(addLi);
  },false);
  var outUl=document.getElementById('out-ul')
  var outLi=outUl.getElementsByClassName('out-li');
  for(var i=0;i<outLi.length;i++){
   outLi[i].onclick=function(){
    alert(1);
   }
  }
 </script>
</body>
</html>

运行效果:

JS实现为动态添加的元素增加事件功能示例【基于事件委托】

比如这样,通过for循环给li添加的事件无法绑定到新增的li上边,详细的原因这里不做解释。那么这个如何解决呢,其实办法也简单,就是通过事件委托的方式去解决,直接上代码,上面的代码简单改造:

<!DOCTYPE html>
<html lang="en">
<head>
 <meta charset="UTF-8">
 <title>3water.com js动态添加事件</title>
</head>
<body>
 <ul id="out-ul">
  <li class="out-li">123</li>
  <li class="out-li">123</li>
  <li class="out-li">123</li>
 </ul>
 <button id="btn">添加</button>
 <script>
  var outUl=document.getElementById('out-ul')
  var outLi=outUl.getElementsByClassName('out-li');
  document.getElementById('btn').addEventListener('click',function(){
   var htmlFragment='<li>我是新增的li</li>';
   var addLi=document.createElement('li');
   addLi.innerHTML=htmlFragment;
   outUl.appendChild(addLi);
  },false);
  outUl.addEventListener('click',function(e){
   e=e || window.event;//兼容ie
   alert(e.target.innerHTML);
  }, false);
 </script>
</body>
</html>

运行效果:

JS实现为动态添加的元素增加事件功能示例【基于事件委托】

这样一来,即便是新增的li点击事件也可以被触发了,不过在这里jquery的详细方式就不做介绍了,原生js跟jquery的解决原理其实是一样的。相信大家把原生的理解了,jquery的方式也可以很好的理解

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

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

Javascript 相关文章推荐
javaScript对象和属性的创建方法
Jan 15 Javascript
20个最新的jQuery插件
Jan 13 Javascript
关于js中alert弹出窗口文本换行问题简单详细说明
Dec 11 Javascript
jQuery实现id模糊查询的小例子
Mar 19 Javascript
Angular2 (RC4) 路由与导航详解
Sep 21 Javascript
jQuery布局组件EasyUI Layout使用方法详解
Feb 28 Javascript
vue中使用cropperjs的方法
Mar 01 Javascript
Angular2进阶之如何避免Dom误区
Apr 02 Javascript
echarts实现地图定时切换散点与多图表级联联动详解
Aug 07 Javascript
vue解决花括号数据绑定不成功的问题
Oct 30 Javascript
微信小程序 获取手机号 JavaScript解密示例代码详解
May 14 Javascript
JavaScript原型链中函数和对象的理解
Jun 16 Javascript
JS实现遍历不规则多维数组的方法
Mar 21 #Javascript
vue项目关闭eslint校验
Mar 21 #Javascript
去掉vue 中的代码规范检测两种方法(Eslint验证)
Mar 21 #Javascript
使用Vue.js和Flask来构建一个单页的App的示例
Mar 21 #Javascript
JS代码实现电脑配置检测功能
Mar 21 #Javascript
vue2 mint-ui loadmore实现下拉刷新,上拉更多功能
Mar 21 #Javascript
javascript与PHP动态往类中添加方法对比
Mar 21 #Javascript
You might like
php空间不支持socket但支持curl时recaptcha的用法
2011/11/07 PHP
php长字符串定义方法
2012/07/12 PHP
php实现的美国50个州选择列表实例
2015/04/20 PHP
php中使用gd库实现下载网页中所有图片
2015/05/12 PHP
php获取指定(访客)IP所有信息(地址、邮政编码、国家、经纬度等)的方法
2015/07/06 PHP
php实现微信原生支付(扫码支付)功能
2018/05/30 PHP
上传的js验证(图片/文件的扩展名)
2013/04/25 Javascript
js操作iframe的一些方法介绍
2013/06/25 Javascript
Jquery 过滤器(first,last,not,even,odd)的使用
2014/01/22 Javascript
javascript强制点击广告的方法
2015/02/06 Javascript
基于jQuery实现鼠标点击导航菜单水波动画效果附源码下载
2016/01/06 Javascript
Angular2学习笔记——详解NgModule模块
2016/12/02 Javascript
javascript中闭包概念与用法深入理解
2016/12/15 Javascript
vue高德地图之玩转周边
2017/06/16 Javascript
利用pm2部署多个node.js项目的配置教程
2017/10/22 Javascript
Angular6使用forRoot() 注册单一实例服务问题
2019/08/27 Javascript
DWR内存兼容及无法调用问题解决方案
2020/10/16 Javascript
js实现抽奖功能
2020/11/24 Javascript
[48:54]VGJ.T vs infamous Supermajor小组赛D组败者组第一轮 BO3 第二场 6.3
2018/06/04 DOTA
Python正则表达式使用范例分享
2016/12/04 Python
手写一个python迭代器过程详解
2019/08/27 Python
在tensorflow中设置使用某一块GPU、多GPU、CPU的操作
2020/02/07 Python
使用PyQt5实现图片查看器的示例代码
2020/04/21 Python
Python装饰器结合递归原理解析
2020/07/02 Python
详解python日志输出使用配置文件格式
2021/02/10 Python
THE OUTNET美国官网:国际设计师品牌折扣网站
2017/03/07 全球购物
Oral-B荷兰:牙医最推荐的品牌
2020/02/25 全球购物
初中音乐教学反思
2014/01/12 职场文书
英文感谢信范文
2015/01/21 职场文书
经营场所使用证明
2015/06/19 职场文书
推广普通话主题班会
2015/08/17 职场文书
教学反思怎么写
2016/02/24 职场文书
导游词之江苏溱潼古镇
2019/11/27 职场文书
手把手教你怎么用Python实现zip文件密码的破解
2021/05/27 Python
python基础入门之字典和集合
2021/06/13 Python
SQL注入详解及防范方法
2021/12/06 MySQL