所以我会简短地说:jquery.off()
不会禁用我设置的监听.on
.
html:
<span id="myspan">lol</span>
<button id="b1">jquery On</button>
<button id="b2">jquery Off</button>
js:
$("#b1").on("click", add);
$("#b2").on("click", del);
function add() {
$("#myspan").on("click", function(e) {
var a = 1;
testfunc(a, e);
});
}
function del() {
$("#myspan").off("click", testfunc);
}
function testfunc(num, event) {
alert(num);
}
所以首先我们添加到myspan the testfunc()
通过单击jquery 开启按钮。完成此操作后,如果单击范围,我们会收到警报。接下来,我们点击jquery 关闭按钮。这应该会删除侦听器,但事实并非如此。即使在那之后,当我们点击myspan testfunc
仍然附着。
为什么?我怎样才能删除它?
您的参数不匹配
这并不是因为您绑定到了不同的函数(匿名函数)。然后你试图解除绑定testfunc
...为了让您的活动(解除)绑定发挥作用两个参数之间on
and off
必须匹配.
可能的解决方法
如果这是唯一的click
元素上的事件侦听器,那么最简单的方法是通过调用以下方式与匿名函数解除绑定:
$("#myspan").off("click");
如果您将多个事件处理程序绑定到同一元素上的单击事件,那么您还可以通过提供命名空间来区分它们,然后在off
call.
$("#myspan").on("click.test", function(e) { ... });
...
$("#myspan").off("click.test");
或者,如果您想取消绑定使用同一命名空间绑定的多个不同事件处理程序,则仅使用命名空间:
$("#myspan").off(".test");
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)