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 相关文章推荐
30个最好的jQuery 灯箱插件分享
Apr 25 Javascript
Jquery使用css方法改变样式实例
May 18 Javascript
整理AngularJS中的一些常用指令
Jun 16 Javascript
jquery彩色投票进度条简单实例演示
Jul 23 Javascript
js定义类的几种方法(推荐)
Jun 08 Javascript
jQuery实现复制到粘贴板功能
Feb 11 Javascript
JavaScript实现简单评论功能
Aug 17 Javascript
vue移动端实现红包雨效果
Jun 23 Javascript
jQuery.extend 与 jQuery.fn.extend的用法及区别实例分析
Jul 25 jQuery
对layui初始化列表的CheckBox属性详解
Sep 13 Javascript
vue-calendar-component 封装多日期选择组件的实例代码
Dec 04 Vue.js
vue实现图书管理系统
Dec 29 Vue.js
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中获取url与物理路径的总结
2013/06/21 PHP
php实现的任意进制互转类分享
2015/07/07 PHP
PHP实现通过get方式识别用户发送邮件的方法
2015/07/16 PHP
PHP中类的继承和用法实例分析
2016/05/24 PHP
浅谈PHPANALYSIS提取关键字
2019/03/08 PHP
初学Javascript的一些总结
2008/11/03 Javascript
jQuery+css+html实现页面遮罩弹出框
2013/03/21 Javascript
js实现倒计时(距离结束还有)示例代码
2013/07/24 Javascript
js中的eval()函数把含有转义字符的字符串转换成Object对象的方法
2016/12/02 Javascript
js实现滑动到页面底部自动加载更多功能
2017/02/15 Javascript
jquery中为什么能用$操作
2019/06/18 jQuery
layer.open 获取不到表单信息的解决方法
2019/09/26 Javascript
JS数组方法reverse()用法实例分析
2020/01/18 Javascript
linux环境下安装pyramid和新建项目的步骤
2013/11/27 Python
python实现超简单端口转发的方法
2015/03/13 Python
简单介绍Python中的floor()方法
2015/05/15 Python
Python的消息队列包SnakeMQ使用初探
2016/06/29 Python
Python编程使用NLTK进行自然语言处理详解
2017/11/16 Python
用python 批量更改图像尺寸到统一大小的方法
2018/03/31 Python
python 实现倒排索引的方法
2018/12/25 Python
如何解决tensorflow恢复模型的特定值时出错
2020/02/06 Python
关于jupyter打开之后不能直接跳转到浏览器的解决方式
2020/04/13 Python
浅谈关于html5中图片抛物线运动的一些心得
2018/01/09 HTML / CSS
卡西欧G-SHOCK英国官网: 防水防震手表
2018/01/08 全球购物
英国露营设备和户外服装购物网站:Simply Hike
2019/05/05 全球购物
Clarks其乐鞋荷兰官网:Clarks荷兰
2019/07/05 全球购物
恶搞卫生巾广告词
2014/03/18 职场文书
节约用水倡议书
2014/04/16 职场文书
协议书模板
2014/04/23 职场文书
好的促销活动方案
2014/08/21 职场文书
领导干部群众路线个人对照检查材料思想汇报
2014/09/30 职场文书
酒店辞职书怎么写
2015/02/26 职场文书
乡镇党建工作总结2015
2015/05/19 职场文书
初中美术教学反思
2016/02/17 职场文书
详解JAVA的控制语句
2021/11/11 Java/Android
Android自定义双向滑动控件
2022/04/19 Java/Android