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 相关文章推荐
jQuery :nth-child前有无空格的区别分析
Jul 11 Javascript
js弹出模式对话框,并接收回传值的方法
Mar 12 Javascript
JavaScript实现维吉尼亚(Vigenere)密码算法实例
Nov 22 Javascript
javascript实现保留两位小数的多种方法
Dec 18 Javascript
jqPlot jQuery绘图插件的使用
Jun 18 Javascript
javascript中的面向对象
Mar 30 Javascript
详解用webpack把我们的业务模块分开打包的方法
Jul 20 Javascript
JS实现的Object数组去重功能示例【数组成员为Object对象】
Feb 01 Javascript
说说如何使用Vuex进行状态管理(小结)
Apr 14 Javascript
Vue 中 filter 与 computed 的区别与用法解析
Nov 21 Javascript
微信小程序实现Swiper轮播图效果
Nov 22 Javascript
JavaScript中的全局属性与方法深入解析
Jun 14 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
全国FM电台频率大全 - 5 内蒙古自治区
2020/03/11 无线电
Win2003服务器安全加固设置--进一步提高服务器安全性
2007/05/23 PHP
PHP 面向对象程序设计(oop)学习笔记(三) - 单例模式和工厂模式
2014/06/12 PHP
PHP实现Markdown文章上传到七牛图床的实例内容
2020/02/11 PHP
JQuery 返回布尔值Is()条件判断方法代码
2012/05/14 Javascript
Javascript图像处理思路及实现代码
2012/12/25 Javascript
html dom节点操作(获取/修改/添加或删除)
2014/01/23 Javascript
原生js实现复制对象、扩展对象 类似jquery中的extend()方法
2014/08/30 Javascript
jQuery事件绑定和委托实例
2014/11/25 Javascript
实例讲解jquery中mouseleave和mouseout的区别
2016/02/17 Javascript
RequireJS使用注意细节
2016/05/15 Javascript
Jquery Easyui表单组件Form使用详解(30)
2016/12/19 Javascript
浅谈vue的几种绑定变量的值 防止其改变的方法
2018/03/01 Javascript
JS实现点击拉拽轮播图pc端移动端适配
2018/09/05 Javascript
vue-cli2.0转3.0之项目搭建的详细步骤
2018/12/11 Javascript
小程序获取当前位置加搜索附近热门小区及商区的方法
2019/04/08 Javascript
详解javascript void(0)
2020/07/13 Javascript
vue动画—通过钩子函数实现半场动画操作
2020/08/09 Javascript
[49:35]2018DOTA2亚洲邀请赛3月30日 小组赛A组 KG VS TNC
2018/03/31 DOTA
[01:00:53]2018DOTA2亚洲邀请赛3月29日 小组赛B组 iG VS Secret
2018/03/30 DOTA
[00:15]天涯墨客终极技能展示
2018/08/25 DOTA
Python 专题五 列表基础知识(二维list排序、获取下标和处理txt文本实例)
2017/03/20 Python
Python Socket使用实例
2017/12/18 Python
python爬虫 使用真实浏览器打开网页的两种方法总结
2018/04/21 Python
Python实现的爬虫刷回复功能示例
2018/06/07 Python
Python中断多重循环的思路总结
2019/10/04 Python
Python 如何查找特定类型文件
2020/08/17 Python
英国第一的购买便宜玩具和游戏的在线购物网站:Bargain Max
2018/01/24 全球购物
美国排名第一的泳池用品直接来源:In The Swim
2019/09/23 全球购物
小学校长先进事迹材料
2014/05/13 职场文书
2015年度团总支工作总结
2015/04/23 职场文书
2015年班主任德育工作总结
2015/05/21 职场文书
法律意见书范本
2015/06/04 职场文书
react antd实现动态增减表单
2021/06/03 Javascript
Java生成日期时间存入Mysql数据库的实现方法
2022/03/03 Java/Android
golang实现浏览器导出excel文件功能
2022/03/25 Golang