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 相关文章推荐
select标记美化--JS式插件、后期加载
Apr 01 Javascript
JavaScript输出当前时间Unix时间戳的方法
Apr 06 Javascript
使用Vue.js创建一个时间跟踪的单页应用
Nov 28 Javascript
很棒的一组js图片轮播特效
Jan 12 Javascript
JavaScript 网页中实现一个计算当年还剩多少时间的倒数计时程序
Jan 25 Javascript
MUI 解决动态列表页图片懒加载再次加载不成功的bug问题
Apr 13 Javascript
bootstrap响应式表格实例详解
May 15 Javascript
JavaScript 完成注册页面表单校验的实例
Aug 19 Javascript
使用Vue.js和Element-UI做一个简单登录页面的实例
Feb 23 Javascript
vue better scroll 无法滚动的解决方法
Jun 07 Javascript
js调用设备摄像头的方法
Jul 19 Javascript
关于单文件组件.vue的使用
Sep 20 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写的带缓存数据功能的mysqli类
2012/09/06 PHP
fetchAll()与mysql_fetch_array()的区别详解
2013/06/05 PHP
js 表单验证方法(实用)
2009/04/28 Javascript
JavaScript实用技巧(一)
2010/08/16 Javascript
JavaScript中两种链式调用实现代码
2011/01/12 Javascript
JS实现将人民币金额转换为大写的示例代码
2014/02/13 Javascript
javascript检测移动设备横竖屏
2016/05/21 Javascript
微信小程序 限制1M的瘦身技巧与方法详解
2017/01/06 Javascript
微信小程序 共用变量值的实现
2017/07/12 Javascript
jQuery中过滤器的基本用法示例
2017/10/11 jQuery
微信小程序实现下载进度条的方法
2017/12/08 Javascript
基于Axios 常用的请求方法别名(详解)
2018/03/13 Javascript
vue+jquery+lodash实现滑动时顶部悬浮固定效果
2018/04/28 jQuery
vue router+vuex实现首页登录验证判断逻辑
2018/05/17 Javascript
layui实现checkbox的目录树tree的例子
2019/09/12 Javascript
利用JS如何获取form表单数据
2019/12/19 Javascript
python备份文件以及mysql数据库的脚本代码
2013/06/10 Python
centos系统升级python 2.7.3
2014/07/03 Python
Python通过正则表达式选取callback的方法
2015/07/18 Python
Python用threading实现多线程详解
2017/02/03 Python
pandas 实现字典转换成DataFrame的方法
2018/07/04 Python
python 多线程中子线程和主线程相互通信方法
2018/11/09 Python
python多线程+代理池爬取天天基金网、股票数据过程解析
2019/08/13 Python
filter使用python3代码进行迭代元素的实例详解
2020/12/03 Python
CSS3 毛玻璃效果
2019/08/14 HTML / CSS
详解HTML5中download属性的应用
2015/08/06 HTML / CSS
html5 canvas合成海报所遇问题及解决方案总结
2017/08/03 HTML / CSS
德国狗狗用品在线商店:Schecker
2017/03/17 全球购物
岗位职责的定义
2013/11/10 职场文书
2014中考励志标语
2014/06/05 职场文书
护士节活动总结
2014/08/29 职场文书
小学生国庆节演讲稿
2014/09/05 职场文书
大三学年自我鉴定范文(3篇)
2014/09/28 职场文书
2019年入党思想汇报
2019/03/25 职场文书
深入浅出讲解Java8函数式编程
2022/01/18 Java/Android
MySQL事务的隔离级别详情
2022/07/15 MySQL