问题描述

// 图片按钮
<img src="xxx" style="margin-left: 34px;margin-top: 7px;" class="addBtn2">

第一次点击按钮时,正常触发$(document).on(“click”, “.addBtn2”, function () {})事件,动态添加相关内容。

 $(document).on("click", ".addBtn2", function () {// 执行代码console.log(this)var no = $("#formzhicheng .item_zhiwu").length;if($("#formzhicheng .item_zhiwu").length == 5){layer.msg("时间段数已满");}else{var noFuture = no*1+1;var html = main2.renderHtmlOntInit(noFuture); // 返回元素$("#formzhicheng").append(html);$("#interest").val(noFuture);}form.render();starttimeRenderBotany(); // 启动时间插件});// 返回要渲染的dom元素// lamplight 进入页面时请求的数组renderHtmlOntInit:function(id){var str = "";str +=`dom元素`;str += main2.Setting();str +=`dom元素`;str += main2.lamplightHtmlBtn(id,lamplight);//循环渲染dom元素str +=`dom元素`;str += main2.lamplightHtmlInput(id,lamplight);//循环渲染dom元素str +=`dom元素`;return str;},// 启动时间插件function starttimeRenderBotany() {lay('.onlineTime').each(function () {laydate.render({elem: this,type: 'time',trigger: 'click'});});$(".onlineTime").removeAttr("lay-key");};

当tab切换页面返回后点击页面的按钮,会多次触发$(document).on(“click”, “.addBtn2”, function () {})事件,触发了两次,当第三次时,会发现触发了三次,以此类推。。。。

分析:

明明每次tab切换时都全部刷新了页面,为什么像是被删除的元素依然存在。原因暂时没有弄明白,查询了很多大佬的解决方法和解释,但看着原因都不太像。
一种是:问题的本质,事件委托造成的。
一种是:绑定一直都在,而这个绑定被保存在一个叫做事件队列的地方,他不在循环执行的主线程中,画了一张需要默契才能看懂的图。

像是知道,又说不明白。
有些懵!!!

解决方案:

第一种:直接给添加的元素上绑定事件。
动态添加的元素,再动态为此绑定事件,待元素被删除后,与其绑定的相应事件其实是会从事件绑定队列中删除。

// 图片按钮<img src="xxx" class="addBtn2" onclick="toogle(this)">function toogle(_this){// 执行代码 同上};

第二种:使用off方法,在绑定事件前解绑元素

 $(document).off('click','.addBtn2').on("click", ".addBtn2", function () {// 执行代码 同上});

第三种:定时器中的事件绑定(没有尝试)
设定一个全局变量来保存这个定时器,在每次设定定时器时,先清除已经设定过的定时器。

clearInterval(timer); //粗暴的写法
timer&&clearInterval(timer); //严谨的写法
timer=setInterval(function () {console.log('定时器');
},2000);

JS动态添加元素绑定点击事件,触发事件多次执行问题?相关推荐

  1. js动态添加元素为何 点击事件无效

    本来觉得不用提的,但是发现最近几个朋友在提,而且新来的小兄弟也有点迷糊这个,所以就简单说说, 看看下面的代码: <!DOCTYPE html> <html><head&g ...

  2. jquery动态渲染绑定点击事件不生效

    原因:动态添加的HTML元素是在CSS,JS代码加载完成后再渲染的HTML页面.浏览器解析这些通过ajax请求到后台返回的数据,再根据返回的结果动态生成HTML页面时,这时绑定事件的标签元素还没有生成 ...

  3. Easyui中使用jquery或js动态添加元素时出现的样式失效的解决方法

    Easyui中使用jquery或js动态添加元素时出现的样式失效的解决方法 在添加完之后,可以使用 $.parser.parse();这个方法进行处理: (1) 对整个页面重新渲染: $.parser ...

  4. Unity 碰撞事件 触发事件

    Unity 碰撞事件 触发事件 碰撞和被碰撞的物体都需要加有 Collider 碰撞组件 两个物体至少有一个带有刚体 触发器需要在Collider组件中勾选Trigger属性 1.触发器事件 //触发 ...

  5. jquery 动态按钮绑定点击事件

    一.Jquery实现点击事件的四种写法 来自:https://blog.csdn.net/liutianjie/article/details/85112787 1. $(".tab&quo ...

  6. 关于js中无法绑定点击事件

    在js文件中添加点击事件失败,但是HTML中onclick就能成功. 解决办法:将js的引用的script标签放到</body>的后面.这样在页面渲染之后再执行js代码.

  7. 微信小程序-如何点击marker触发事件更改图标icon

    文章目录 前言 1.触发事件更改marker图标icon 2.实现步骤 2.1.wxml页面 2.2.js页面代码 总结 前言 最近在做课设,要求实现一个找附近停车位的功能 绿色marker为空闲车位 ...

  8. EventSystem的事件触发和pointer类执行顺序

    上一篇写了Event Trigger的触发事件方法.这篇写EventSystem的触发事件方法.这两个方法都可以用来触发3D和2D事件.而且场景中都必须存在EventSystem这个GameObjec ...

  9. js为链接绑定点击事件并且附带return false;来阻止跳转

    <!DOCTYPE HTML> <html><head><meta charset="gb2312" /><title> ...

  10. SpringBoot中使用thymeleaf时点击按钮触发事件失败

    场景 在SpringBoot项目中使用thymeleaf模板时按钮的点击事件没法触发. 需要用到jquery的delegate()函数. delegate()函数用于为指定元素的一个或多个事件绑定事件 ...

最新文章

  1. 企业研发管理工具应用分析
  2. 聊一聊我认识的Linux系统
  3. java web: Servlet JSP MVC
  4. linux中grep命令查找目录下,linux中查找grep与find命令的使用
  5. php修改特定位bit的值,解读天书 - 漏洞利用中级技巧的分析
  6. nodejs 读取excel文件,并去重
  7. Cookie/Session机制详解 转
  8. Notefile for Mac(记事本工具)支持12系统
  9. PHP array(递归)转xml,xml转array
  10. linux 内核logo 居中,linux logo制作及居中显示
  11. JavaAPI在线帮助文档
  12. 3D建模和处理软件以及相关的库(来自中科大老师)
  13. 使用Auto.js实现微信自动发朋友圈脚本
  14. 计算机网络实验:常用网络命令的使用(ping、ipconfig、netstat、tracert、arp)
  15. 破解双中台困局:万家数科 x StarRocks 数字化技术实践
  16. Vue3.x的安装和初始化
  17. s3cCTF(1)crypto
  18. 敏捷宣言的内容及准则
  19. Python-基本数据结构list和dict
  20. Linux、Windows常见端口号大全

热门文章

  1. 前端JS时间验证,结束时间不早于开始时间
  2. python pip什么意思_“pip install”和“python -m pip install”有什么区别?
  3. 不背单词vs墨墨背单词 竞品分析
  4. 芯片设计流程最全讲解
  5. linux 10247 java_linux kubernetes
  6. MBP清除NVRAM和PRAM
  7. SpringBoot整合Thymeleaf(十三)
  8. 0基础如何转行自学软件测试
  9. 屏幕尺寸、屏幕分辨率、高清屏、屏幕像素密度
  10. 微信开发工具怎么模拟android环境,uni-app判断客户端环境是 安卓Android、iOS 、微信开发工具...