在用jquery绑定事件的时候,一般来说习惯性都是喜欢绑定匿名事件。比如下面的:
<body>
<input type="button" class="dv" value="按钮">
<script src="js/jquery-3.3.1.js"></script>
<script type="text/javascript">
$(function () {
$(".dv").click(function () {// 第一种
alert("Hello World");
});
$(".dv").on("click",function () { //第二种
alert("Hello World");
});
$(".dv").bind("click",function () { //第三种
alert("Hello World");
})
})
</script>
</body>
由于是匿名事件,所以假如你这个事件是放在一个for循环里面的话,这样的匿名事件是会重复的叠加叠加上去,
之所以会叠加,是因为是匿名事件,会重复的创建空间给这个匿名事件,所以才会导致叠加,这个问题可以后面解决。
我用的解决方案:
在绑定这个事件之前,我们先解绑之前绑定的事件,这样就可以保证每次操作的时候都是只有一个时间,具体的操作就是,如果用on绑定的事件,你就用off取消绑定,再用on绑定事件。代码如下:
$('.preset-list.fillL3').off('click', '.preset-list-button');
$('.preset-list.fillL3').on('click', '.preset-list-button', function () {
presetClick($(this)[0]);
});
如果你用的是bind绑定的话就用unbind取消绑定,这样就可以避免使用匿名事件的时候事件会重复叠加到挂载元素中。