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 相关文章推荐
Area 区域实现post提交数据的js写法
Apr 22 Javascript
JQuery调用WebServices的方法和4个实例
May 06 Javascript
Node.js模块加载详解
Aug 16 Javascript
JS实现5秒钟自动封锁div层的方法
Feb 20 Javascript
jQuery获取与设置iframe高度的方法
Aug 01 Javascript
vue从使用到源码实现教程详解
Sep 19 Javascript
js实现加载更多功能实例
Oct 27 Javascript
elementui的默认样式修改方法
Feb 23 Javascript
Vue2.0学习系列之项目上线的方法步骤(图文)
Sep 25 Javascript
利用es6 new.target来对模拟抽象类的方法
May 10 Javascript
解决layer弹出层中表单不起作用的问题
Sep 09 Javascript
如何在vue中使用jointjs过程解析
May 29 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
咖啡是不是喝了会上瘾?咖啡是必须品吗!
2021/03/04 新手入门
使用ThinkPHP自带的Http类下载远程图片到本地的实现代码
2011/08/02 PHP
PHP两种去掉数组重复值的方法比较
2014/06/19 PHP
[IE&amp;FireFox兼容]JS对select操作
2007/01/07 Javascript
javascript indexOf函数使用说明
2008/07/03 Javascript
javascript concat数组累加 示例
2009/09/03 Javascript
基于jQuery替换table中的内容并显示进度条的代码
2011/08/02 Javascript
extjs 如何给column 加上提示
2014/07/29 Javascript
jquery实现页面关键词高亮显示的方法
2015/03/12 Javascript
深入了解JavaScript中的Symbol的使用方法
2015/07/28 Javascript
jquery插件tytabs.jquery.min.js实现渐变TAB选项卡效果
2015/08/25 Javascript
对jquery的ajax进行二次封装以及ajax缓存代理组件:AjaxCache详解
2016/04/11 Javascript
jQuery自定义组件(导入组件)
2016/11/08 Javascript
通过命令行生成vue项目框架的方法
2017/07/12 Javascript
nodejs简单实现TCP服务器端和客户端的聊天功能示例
2018/01/04 NodeJs
浅谈react受控组件与非受控组件(小结)
2018/02/09 Javascript
jQuery 实现批量提交表格多行数据的方法
2018/08/09 jQuery
bootstrap tooltips在 angularJS中的使用方法
2019/04/10 Javascript
js实现带有动画的返回顶部
2020/08/09 Javascript
vue keep-alive的简单总结
2021/01/25 Vue.js
Python 正则表达式(转义问题)
2014/12/15 Python
Python将xml和xsl转换为html的方法
2015/03/10 Python
浅谈scrapy 的基本命令介绍
2017/06/13 Python
Python+OpenCV让电脑帮你玩微信跳一跳
2018/01/04 Python
python实现数独游戏 java简单实现数独游戏
2018/03/30 Python
对python中数据集划分函数StratifiedShuffleSplit的使用详解
2018/12/11 Python
python字符串切割:str.split()与re.split()的对比分析
2019/07/16 Python
解决tensorflow打印tensor有省略号的问题
2020/02/04 Python
Matplotlib使用字符串代替变量绘制散点图的方法
2020/02/17 Python
用python爬虫批量下载pdf的实现
2020/12/01 Python
关于赌博的检讨书
2014/01/08 职场文书
《狼》教学反思
2014/03/02 职场文书
学校青年志愿者活动总结
2015/05/06 职场文书
python中的被动信息搜集
2021/04/29 Python
Win11 S Mode版本泄露 正式上线后叫做Windows 11 SE
2021/11/21 数码科技
Python中super().__init__()测试以及理解
2021/12/06 Python