(转载)js(jquery)的on绑定点击事件执行两次的解决办法
js(jquery)的on绑定点击事件执行两次的解决办法—不是事件绑定而是事件冒泡
遇到的问题:jquery中用.on()给页面中新加的元素添加点击事件时,点击事件源,绑定的事件执行两次,这里的alert会执行两次,相应地数组删除也执行两次,具体代码如下(其中.tabDel是页面加载之后新生成的元素,故不能用普通的$(‘.tabDel).click(function(){})的方法添加点击事件):
$('.right').on('click','.tabDel',function(){//删除所加 tab 节点的函数
alert('tab的索引:'+$(this).parents('.contentLi2').index());
var iNum1 = $(this).parents('.contentLi2').index();
var iNum2 = $(this).parents('.anElement').index();
$scope.module.tab[iNum1].fieldList.splice(iNum2,1);
$(this).parents('.anElement').remove();
});
上网找的解决方法大概有一下两种:
1、在用 on 绑定 click 事件之前,对该事件解绑,也就是
$('.right').off('click','.tabDel').on('click','.tabDel',function(){//删除所加 tab 节点的函数
// alert('tab的索引:'+$(this).parents('.contentLi2').index());
var iNum1 = $(this).parents('.contentLi2').index();
var iNum2 = $(this).parents('.anElement').index();
$scope.module.tab[iNum1].fieldList.splice(iNum2,1);
$(this).parents('.anElement').remove();
});
2、在on绑定的click事件执行之后进行解绑,用unbind(),即:
$('.right').on('click','.tabDel',function(){//删除所加 tab 节点的函数
// alert('tab的索引:'+$(this).parents('.contentLi2').index());
var iNum1 = $(this).parents('.contentLi2').index();
var iNum2 = $(this).parents('.anElement').index();
$scope.module.tab[iNum1].fieldList.splice(iNum2,1);
$(this).parents('.anElement').remove();
});
$('.right .tabDel').unbind('clock');
然而,这也没有解决问题,我遇到的情况是这也写了之后,alert不执行了,原因是刚才说过:‘.tabDel’是页面上后来生成的元素,不能直接绑定事件,而unbind()的语法是:
所以我就开始找其他解决问题的办法,知道后来发现在on绑定事件的时候没有阻止冒泡,在代码中加入 return false 阻止冒泡之后,事件正常运行了,代码如下:
$('.right').on('click','.tabDel',function(){//删除所加 tab 节点的函数
// alert('tab的索引:'+$(this).parents('.contentLi2').index());
var iNum1 = $(this).parents('.contentLi2').index();
var iNum2 = $(this).parents('.anElement').index();
$scope.module.tab[iNum1].fieldList.splice(iNum2,1);
$(this).parents('.anElement').remove();
return false;
});
目前为止代码可以正常运行了,问题的元凶是冒泡,只是博主最开始找错了方向。
然而,阻止冒泡的方法并不止 return false 这一种,还有event.stopPropagation(),这两种方法是有区别的,简单来说:
event.stopPropagation()会阻止事件往上冒泡,但是并不阻止事件本身;
return false 则是既阻止了事件往上冒泡又阻止了事件本身。
欲详细了解这两种方法的区别,请查找相关资料。
参考文章:
Js 冒泡事件阻止
本文转载自:
js(jquery)的on绑定点击事件执行两次的解决办法—不是事件绑定而是事件冒泡
(转载)js(jquery)的on绑定点击事件执行两次的解决办法的更多相关文章
- 前端的事件冒泡(例如点击一次onclick事件执行两次)解决办法
问题概要: 当我运用antd 中 radio组件的时候发现radio组件是有bug的 就是你不能给他赋予id 和 value,同时也绑定不上onclick等事件.举个例子: 可以看到 你就算赋予了id ...
- JS: javascript 点击事件执行两次js问题 ,解决jquery绑定click事件出现点击一次执行两次问题
javascript 点击事件执行两次js问题 在JQuery中存在unbind()方法,先解绑再添加点击事件,解决方案为: $(".m-layout-setting").unbi ...
- 通过jQuery给<li>绑定点击事件
背景:有个需求需要js中实现li标签的事件绑定,li通过在ajax请求中动态添加,按照常理,使用jQuery,可以使用以下方法绑定点击事件: $(function(){ commonAjaxCall ...
- IOS的Safari浏览器中,点击事件失效的原理及解决办法
这里做了事件委托,简单区分一下[目标元素]和[代理元素],为后续论述理解做铺垫. [目标元素]:实际希望点击的元素,可以是任意标签. [代理元素]:代替[目标元素]触发点击事件的元素,有可能是目标元素 ...
- Js,JQuery不同方式绑定的同一事件可以同时触发,互不干扰
比如,onclick绑定,然后jquery.on("click", function(){})绑定等
- Jquery 事件执行两次
js(jquery)的on绑定点击事件执行两次的解决办法—不是事件绑定而是事件冒泡 阻止冒泡的方法并不止 return false 这一种,还有event.stopPropagation(),这两种方 ...
- JQuery 动态加载 HTML 元素时绑定点击事件无效问题
问题描述 假设项目中有一个列表页面,如下: 当点击列表一行数据可以显示详情页面,而详情页面的数据是根据当前行的数据作为参数,通过 ajax 请求到后台返回的数据,再根据返回的结果动态生成 html 页 ...
- jQuery实现当按下回车键时绑定点击事件
jQuery实现当按下回车键时绑定点击事件 <script> $(function(){ $(document).keydown(function(event){ if(event.key ...
- 由于js词法性质和全局变量被更改,循环绑定的click事件执行时变量和定义时 不一致的bug,各种解决方案。
由于js词法性质和全局变量被更改,循环绑定的click事件执行时变量和定义时 不一致的bug,各种解决方案. 动态在页面上添加了5个按钮,实现的功能应该是点击对应按钮在控制台输出相应的索引.但因为应该 ...
随机推荐
- 面试准备——java设计模式
1 总体来说,设计模式分为三大类: 设计模式(design pattern)是对软件设计中普遍存在(反复出现)的各种问题,所提出的解决方案. 创建型模式(五种):工厂方法模式.抽象工厂模式.单例模式. ...
- Python内置函数(4)
Python内置函数(4) 1.copyright 交互式提示对象打印许可文本,一个列表贡献者和版权声明 2.credits 交互式提示对象打印许可文本,一个贡献者和版权声明的列表 3.delattr ...
- mysql 基本查询
查询不重复的记录.有时需要将表中的记录去掉重复后显示出来,可以用 distinct 关键字来实现:mysql> select ename,hiredate,sal,deptno from emp ...
- P2016 战略游戏 (树形DP)
题目描述 Bob喜欢玩电脑游戏,特别是战略游戏.但是他经常无法找到快速玩过游戏的办法.现在他有个问题. 他要建立一个古城堡,城堡中的路形成一棵树.他要在这棵树的结点上放置最少数目的士兵,使得这些士兵能 ...
- 家用电脑架服务器提供web
要搞一个可以对外的web服务,需要服务器,域名.这些都需要money,但有时,我们只是想自己可以在外面访问,或是提供给朋友看自己的网站有多牛.这时使用家用电脑配置一个可以提供web的服务器,就显得很必 ...
- GT考试 BZOJ 1009
GT考试 [问题描述] 阿申准备报名参加GT考试,准考证号为N位数X1X2....Xn(0<=Xi<=9),他不希望准考证号上出现不吉利的数字. 他的不吉利数学A1A2...Am(0< ...
- Linux下AT&T汇编语法格式与Intel汇编语法格式异同
由于绝大多数的国内程序员以前只接触过Intel格式的汇编语言,很少或几乎没有接触过AT&T汇编语言,虽然这些汇编代码都是Intel风格的.但在Unix和Linux系统中,更多采用的还是AT&a ...
- grafana 安装 和 Nginx 、EL 联调
https://blog.csdn.net/u010735147/article/details/80943593
- Oracle 实现 一个关键字 匹配多个 字段
有这么一个需求,满足只有一个输入框的条件下,支持不同数据列的搜索结果. 说白了,就是这个 输入框 既可以用来 搜索姓名,也可以搜索 年龄,地址等. 分析: 一般情况下,我们的一个输入框对应 数据库 ...
- 高性能mysql之schema与数据类型优化
1.数据类型 http://www.cnblogs.com/YDDMAX/p/4937770.html