最新文章专题视频专题问答1问答10问答100问答1000问答2000关键字专题1关键字专题50关键字专题500关键字专题1500TAG最新视频文章推荐1 推荐3 推荐5 推荐7 推荐9 推荐11 推荐13 推荐15 推荐17 推荐19 推荐21 推荐23 推荐25 推荐27 推荐29 推荐31 推荐33 推荐35 推荐37视频文章20视频文章30视频文章40视频文章50视频文章60 视频文章70视频文章80视频文章90视频文章100视频文章120视频文章140 视频2关键字专题关键字专题tag2tag3文章专题文章专题2文章索引1文章索引2文章索引3文章索引4文章索引5123456789101112131415文章专题3
当前位置: 首页 - 科技 - 知识百科 - 正文

jquery的on绑定点击事件执行两次如何解决

来源:动视网 责编:小采 时间:2020-11-27 19:59:20
文档

jquery的on绑定点击事件执行两次如何解决

jquery的on绑定点击事件执行两次如何解决:jquery中用.on()给页面中新加的元素添加点击事件时,点击事件源,绑定的事件执行两次,这里的alert会执行两次,相应地数组删除也执行两次,具体代码如下(其中.tabDel是页面加载之后新生成的元素,故不能用普通的$(.tabDel).click(function
推荐度:
导读jquery的on绑定点击事件执行两次如何解决:jquery中用.on()给页面中新加的元素添加点击事件时,点击事件源,绑定的事件执行两次,这里的alert会执行两次,相应地数组删除也执行两次,具体代码如下(其中.tabDel是页面加载之后新生成的元素,故不能用普通的$(.tabDel).click(function


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()的语法是:

$(selector).unbind(event,function)

所以我就开始找其他解决问题的办法,知道后来发现在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 则是既阻止了事件往上冒泡又阻止了事件本身。
欲详细了解这两种方法的区别,请查找相关资料。

文档

jquery的on绑定点击事件执行两次如何解决

jquery的on绑定点击事件执行两次如何解决:jquery中用.on()给页面中新加的元素添加点击事件时,点击事件源,绑定的事件执行两次,这里的alert会执行两次,相应地数组删除也执行两次,具体代码如下(其中.tabDel是页面加载之后新生成的元素,故不能用普通的$(.tabDel).click(function
推荐度:
标签: 绑定 解决 事件
  • 热门焦点

最新推荐

猜你喜欢

热门推荐

专题
Top