8

我在网页中有一个元素,上面有几个回调

// First callback
$("#element").click(fn1);

// Second callback
$("#element").click(fn2);

// Definitions
function fn1(){console.log("1");}
function fn2(){console.log("2");}

有没有办法从 jQuery 触发的回调列表中只删除 fn2。我知道我可以在函数中添加一个“if”和一些全局变量,但这不是我想要的。

4

5 回答 5

4

unbind函数中的第二个参数指定要取消绑定的处理程序。

$("#element").unbind("click", fn2);

工作示例:http: //jsfiddle.net/k73Nx/

于 2013-03-12T09:34:00.793 回答
4

有趣的是还没有人提到命名空间。这有什么原因吗?

附加事件时,您可以为其命名。而不是$(elem).on('click', fn)您将命名空间添加到单击事件。$(elem).on('click.namespaced', fn)

取消绑定后,您也可以使用命名空间取消绑定该确切事件。 $(elem).off('click.namespaced')

当您内联定义事件函数时,这是最实用的。

您可以使用命名空间做的另一件事是,只需一次调用即可取消绑定命名空间中的所有事件类型:$(elem).off('.namespaced')

于 2013-03-12T10:08:53.343 回答
1

请注意您的语法,其他答案与他们的答案非常松散。

如果您使用:

$('#element').on('click',function() {
 //callback code
});

然后你必须使用:

$('#element').off('click');

不能使用

$('body').off('click','#element',function() { }); 

或者

$(document).off('click','#element',function() { }); 

因为您最初将事件绑定到#element,而不是文档或正文。

于 2013-03-12T09:41:36.980 回答
0

使用解绑: http: //api.jquery.com/unbind/

例子:

$(document).unbind('click', fn2);
于 2013-03-12T09:34:48.743 回答
0

使用 .off

 $("#element").off("click",fn2);

工作小提琴

于 2013-03-12T09:35:47.417 回答