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 相关文章推荐
使用 JScript 创建 .exe 或 .dll 文件的方法
Jul 13 Javascript
javascript实现浏览器窗口传递参数的方法
Sep 03 Javascript
angularJS中$apply()方法详解
Jan 07 Javascript
JavaScript设置body高度为浏览器高度的方法
Feb 09 Javascript
JS根据生日算年龄的方法
May 05 Javascript
移除AngularJS下URL中的#字符的方法
Jun 19 Javascript
JS使用cookie实现DIV提示框只显示一次的方法
Nov 05 Javascript
js判断主流浏览器类型和版本号的简单实现代码
May 26 Javascript
angular和BootStrap3实现购物车功能
Jan 25 Javascript
解决在vue项目中,发版之后,背景图片报错,路径不对的问题
Mar 06 Javascript
解决vuejs 使用value in list 循环遍历数组出现警告的问题
Sep 26 Javascript
Openlayers实现图形绘制
Sep 28 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 和 XML: 使用expat函数(二)
2006/10/09 PHP
smarty实例教程
2006/11/19 PHP
php 解决旧系统 查出所有数据分页的类
2012/08/27 PHP
PHP列出MySQL中所有数据库的方法
2015/03/12 PHP
php生成rss类用法实例
2015/04/14 PHP
PHP 中提示undefined index如何解决(多种方法)
2016/03/16 PHP
php版微信公众平台入门教程之开发者认证的方法
2016/09/26 PHP
PHP的图像处理实例小结【文字水印、图片水印、压缩图像等】
2019/12/20 PHP
关于火狐(firefox)及ie下event获取的两种方法
2012/12/27 Javascript
深入理解JavaScript高级之词法作用域和作用域链
2013/12/10 Javascript
jQuery插件jFade实现鼠标经过的图片高亮其它变暗
2015/03/14 Javascript
js图片轮播手动切换效果
2015/11/10 Javascript
jQuery中ajax的load()与post()方法实例详解
2016/01/05 Javascript
Angular4 中内置指令的基本用法
2017/07/31 Javascript
webpack的CSS加载器的使用
2018/09/11 Javascript
从0到1构建vueSSR项目之路由的构建
2019/03/07 Javascript
jquery+php后台实现省市区联动功能示例
2019/05/23 jQuery
vue项目配置同一局域网可使用ip访问的操作
2020/10/23 Javascript
详解nginx配置vue h5 history去除#号
2020/11/09 Javascript
Python脚本实现集群检测和管理功能
2015/03/06 Python
用Python制作在地图上模拟瘟疫扩散的Gif图
2015/03/31 Python
python中的计时器timeit的使用方法
2017/10/20 Python
PYTHON如何读取和写入EXCEL里面的数据
2019/10/28 Python
Python2与Python3的区别点整理
2019/12/12 Python
Python 实现使用空值进行赋值 None
2020/03/12 Python
CSS3制作缩略图的详细过程
2016/07/08 HTML / CSS
国际性能运动服装品牌:Dare 2b
2018/07/27 全球购物
Quiksilver美国官网:始于1969年的优质冲浪服和滑雪板外套
2020/04/20 全球购物
UNIX命令速查表
2012/03/10 面试题
自主实习接收函
2014/01/13 职场文书
30年同学聚会感言
2014/01/30 职场文书
中学生国旗下讲话稿
2014/04/26 职场文书
司法局2014法制宣传日活动总结
2014/11/01 职场文书
北京导游词
2015/02/12 职场文书
公司环境卫生管理制度
2015/08/05 职场文书
团结友爱主题班会
2015/08/13 职场文书