如何使用jquery从HTML元素中删除特定事件回调?

时间:2013-03-12 09:31:22

标签: javascript jquery events

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

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

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

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

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

5 个答案:

答案 0 :(得分:4)

unbind函数中的第二个参数指定解除绑定的处理程序。

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

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

答案 1 :(得分:4)

有趣的是,还没有人提到名称空间。这有什么理由吗?

附加活动时,您可以命名它。您可以在click事件中添加命名空间而不是$(elem).on('click', fn)$(elem).on('click.namespaced', fn)

当unbindung时,你可以使用命名空间取消绑定那个确切的事件。 $(elem).off('click.namespaced')

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

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

答案 2 :(得分:1)

这里要小心你的语法,其他答案对他们来说非常松散。

如果您使用:

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

然后你必须使用:

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

无法使用

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

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

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

答案 3 :(得分:0)

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

示例:

$(document).unbind('click', fn2);

答案 4 :(得分:0)

使用.off

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

working fiddle