所以我长话短说jquery .off()
不会禁用我用.on
设置监听。
联系我们
<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);
}
型
因此,首先我们通过单击 jquery On 按钮将testfunc()
添加到myspan。在我们这样做之后,如果我们点击跨度,我们会得到一个警报。接下来,我们单击 jquery off 按钮。这应该删除侦听器,但它没有。即使在此之后,当我们单击myspan时,testfunc
仍然连接。
为什么?我怎么才能去掉它?
4条答案
按热度按时间2j4z5cfb1#
参数不匹配
因为你绑定了一个不同的函数(匿名函数)。然后您尝试从
testfunc
解绑...为了让你的事件(取消)绑定工作**on
和off
之间的两个参数必须匹配**。可能的解决方法
如果这是元素上唯一的
click
事件侦听器,那么通过调用以下函数来解除匿名函数的绑定是最简单的方法:字符串
如果你绑定了多个事件处理程序来点击同一个元素上的事件,那么你也可以通过提供名称空间来区分它们,然后在
off
调用中使用正确的名称空间。型
或者,如果您想取消绑定使用相同命名空间绑定的多个不同事件处理程序,请仅使用命名空间:
型
sxpgvts32#
你并没有将事件处理程序绑定到
testfunc
,而是将它绑定到一个匿名函数,而在这个函数中,你只是调用testfunc
,所以你不能自动取消绑定。要么
字符串
然后
型
或者取消绑定匿名函数
型
也可以命名处理程序
型
并且只移除该处理程序
型
5ssjco0h3#
在这个简单的例子中,将
off
调用替换为:字符串
您不需要将处理程序函数传递给
off
调用,如果您这样做,它只会删除特定的处理程序。但是,您没有附加testfunc
,而是附加了一个只调用testfunc()
的匿名函数。因此,您的off
调用什么也不做。此外,您从未分配变量
testfunc
。vxf3dgd44#
在我的例子中,上述解决方案都不起作用,因为事件侦听器是在具有onclick属性的元素上设置的。用于解除绑定我不能使用的事件off或unbind或类似的东西。我不得不使用removeAttr。对我很有效