最近的项目用到了一个JQuery的插件,逻辑代码就用jQuery来写的,遇到了一个情景问题,解决了,记录一下。
点击页面某个元素,弹出一个模态框,弹出的时候动态的append一些元素,再给元素添加点击事件。
显然,$('.class).click(function(){})
方法失效,这个方法是给页面上已经存在的元素添加事件。
正确方法是:$(document).on('click,'.class',function(){})
这个方法成功的给元素添加上了事件,但是如果用户点了返回,只是关闭了弹框,并不能对页面进行刷新,那么这个时候,当我们再次点击进行模态框,就会发现,我们再一次的绑定了事件,点击的时候function的内容会累积执行。
一开始并没有分析到这个原因,以为是事件冒泡,结果加上了event.stopPropagation();发现该现象仍存在。
在晚上查看了一些资料后定位到是绑定累积的原因。
解决方法:$(document).off('click','.class').on('click','.class',fucntion(){})
每次绑定事件之前先解除绑定。
二:对页面已经存在的元素进行解绑定可以用:
$("#searchUsername").unbind();
$('#searchUsername').click(function(event){
$(".searchChoosedUser .icon-magnifier").click()
});
2019年6月25日再次遇到相同问题。点击事件的函数被执行2次,添加了阻止冒泡也未解决,在点击事件前进行解绑解决。
$(document).off('click','.class').on('click','.class',fucntion(){})`
参考:http://www.seozhijia.net/javascript/99.html 感谢作者分享。