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 相关文章推荐
js实现权限树的更新权限时的全选全消功能
Feb 17 Javascript
基于jQuery的倒计时实现代码
May 30 Javascript
固定网页背景图同时保持图片比例的思路代码
Aug 15 Javascript
javascript if条件判断方法小结
May 17 Javascript
浅谈javascript中的call、apply、bind
Mar 06 Javascript
Three.js学习之文字形状及自定义形状
Aug 01 Javascript
JS实现自动阅读单词(有道单词本添加功能)
Nov 14 Javascript
VUE JS 使用组件实现双向绑定的示例代码
Jan 10 Javascript
javascript中的隐式调用
Feb 10 Javascript
VUE2.0 ElementUI2.0表格el-table自适应高度的实现方法
Nov 28 Javascript
小程序采集录音并上传到后台
Nov 22 Javascript
JavaScript动态生成表格的示例
Nov 02 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脚本数据库功能详解(中)
2006/10/09 PHP
总结PHP如何获取当前主机、域名、网址、路径、端口和参数等
2016/09/09 PHP
PHP数组内存利用率低和弱类型详细解读
2017/08/10 PHP
asp.net和php的区别点总结
2019/10/10 PHP
Jquery图形报表插件 jqplot简介及参数详解
2012/10/10 Javascript
js循环改变div颜色具体方法
2013/06/25 Javascript
jquery中each遍历对象和数组示例
2014/08/05 Javascript
Javascript闭包用法实例分析
2015/01/23 Javascript
jquery判断至少有一个checkbox被选中的方法
2015/06/05 Javascript
jQuery实现大图轮播
2017/02/13 Javascript
js实现颜色阶梯渐变效果(Gradient算法)
2017/03/21 Javascript
JS/jquery实现一个网页内同时调用多个倒计时的方法
2017/04/27 jQuery
微信小程序实现登录页云层漂浮的动画效果
2017/05/05 Javascript
JavaScript正则表达式和级联效果
2017/09/14 Javascript
浅谈在node.js进入文件目录的问题
2018/05/13 Javascript
使用koa2创建web项目的方法步骤
2019/03/12 Javascript
javascript事件监听与事件委托实例详解
2019/08/16 Javascript
详解Webpack抽离第三方类库以及common解决方案
2020/03/30 Javascript
selenium+python环境配置教程详解
2019/05/28 Python
python实现获取单向链表倒数第k个结点的值示例
2019/10/24 Python
Python 实现将numpy中的nan和inf,nan替换成对应的均值
2020/06/08 Python
Numpy数组的广播机制的实现
2020/11/03 Python
canvas绘制树形结构可视图形的实现
2020/04/03 HTML / CSS
DC Shoes俄罗斯官网:美国滑板鞋和服饰品牌
2020/08/19 全球购物
质量工程师岗位职责
2013/11/16 职场文书
中学教师请假制度
2014/02/03 职场文书
办公室文员岗位职责范本
2014/06/12 职场文书
优秀班主任事迹材料
2014/12/16 职场文书
优秀教师个人总结
2015/02/11 职场文书
责任书范本大全
2015/05/11 职场文书
新手,如何业余时间安排好写作、提高写作能力?
2019/10/21 职场文书
抖音短视频(douyin)去水印工具的实现代码
2021/03/30 Javascript
详解MySQL的Seconds_Behind_Master
2021/05/18 MySQL
JavaScript中的宏任务和微任务详情
2021/11/27 Javascript
Redis 的查询很快的原因解析及Redis 如何保证查询的高效
2022/03/16 Redis
Redis特殊数据类型bitmap位图
2022/06/01 Redis