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延迟执行实现方法(setTimeout)
Dec 30 Javascript
原生javascript实现图片按钮切换
Jan 12 Javascript
基于javascript bootstrap实现生日日期联动选择
Apr 07 Javascript
JavaScript中的对象和原型(一)
Aug 12 Javascript
详解jQuery的表单验证插件--Validation
Dec 21 Javascript
javascript自执行函数
Feb 10 Javascript
原生JS实现左右箭头选择日期实例代码
Mar 14 Javascript
基于EasyUI的基础之上实现树形功能菜单
Jun 28 Javascript
Angular学习笔记之集成三方UI框架、控件的示例
Mar 23 Javascript
Vue.directive使用注意(小结)
Aug 31 Javascript
vue3.0 CLI - 2.1 -  component 组件入门教程
Sep 14 Javascript
浅谈 Webpack 如何处理图片(开发、打包、优化)
May 15 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
Notice: Undefined index: page in E:\PHP\test.php on line 14
2010/11/02 PHP
Laravel 5框架学习之数据库迁移(Migrations)
2015/04/08 PHP
thinkphp autoload 命名空间自定义 namespace
2015/07/17 PHP
让任务管理器中的CPU跳舞的js代码
2008/11/01 Javascript
使用Jquery搭建最佳用户体验的登录页面之记住密码自动登录功能(含后台代码)
2011/07/10 Javascript
JavaScript中去掉数组中的重复值的实现方法
2011/08/03 Javascript
JQuery实现用户名无刷新验证的小例子
2013/03/22 Javascript
jQuery选择器源码解读(五):tokenize的解析过程
2015/03/31 Javascript
基于JavaScript实现鼠标悬浮弹出跟随鼠标移动的带箭头的信息层
2016/01/18 Javascript
获取input标签的所有属性的方法
2016/06/28 Javascript
什么是JavaScript注入攻击?
2016/09/14 Javascript
基于bootstrap按钮式下拉菜单组件的搜索建议插件
2017/03/25 Javascript
javascript 中事件冒泡和事件捕获机制的详解
2017/09/01 Javascript
JavaScript实现的斑马线表格效果【隔行变色】
2017/09/18 Javascript
利用Python进行异常值分析实例代码
2017/12/07 Python
python队列通信:rabbitMQ的使用(实例讲解)
2017/12/22 Python
解决Jupyter NoteBook输出的图表太小看不清问题
2020/04/16 Python
基于django和dropzone.js实现上传文件
2020/11/24 Python
HTML 5 标签、属性、事件及浏览器兼容性速查表 附打包下载
2012/10/20 HTML / CSS
英国领先的酒类网上商城:TheDrinkShop
2017/03/16 全球购物
ECCO爱步加拿大官网:北欧丹麦鞋履及皮具品牌
2017/07/08 全球购物
初二政治教学反思
2014/01/12 职场文书
市场营销毕业生自荐信范文
2014/04/01 职场文书
班级年度安全计划书
2014/05/01 职场文书
党员学习中共十八大思想报告
2014/09/12 职场文书
政府班子四风问题整改措施思想汇报
2014/10/08 职场文书
商业用房租赁协议书
2014/10/13 职场文书
2014年妇委会工作总结
2014/12/10 职场文书
报名委托书
2015/01/29 职场文书
社区敬老月活动总结
2015/05/07 职场文书
社区党建工作总结2015
2015/05/13 职场文书
解读MySQL的客户端和服务端协议
2021/05/10 MySQL
Spring Data JPA使用JPQL与原生SQL进行查询的操作
2021/06/15 Java/Android
Python编程根据字典列表相同键的值进行合并
2021/10/05 Python
oracle数据库去除重复数据
2022/05/20 Oracle
CentOS7设置ssh服务以及端口修改方式
2022/12/24 Servers