取消绑定或重置所有jQuery事件

时间:2012-08-15 22:27:42

标签: jquery

我有一个页面,我有一个产品配置器,这个配置器使用ajax .load来加载不同产品的配置器。

如果某人配置了产品,则单击“提交”,添加产品,如果用户再次选择配置程序,并加载相同的产品,则配置程序的所有事件都会加倍。意思是,所有事件都会发生两次......

重置这些事件或阻止这些事件多次触发的最佳方法是什么?

3 个答案:

答案 0 :(得分:3)

我不知道您使用什么语法绑定,但如果您使用on()使用jQuery 1.7,则可以:

$("#myButton").off("click").on("click", function(){
    // ....
});

这将确保所有点击事件首先未绑定,然后绑定您的点击事件。 但是,这会带来风险,如果您通过命名空间绑定了许多点击事件,即使这不是您的意图,它们也可能会被删除。

如果某个事件正在使用命名空间,它可能如下所示:

$("#myButton").off("click.myNamespace").on("click.myNamespace", function(){
    // ....
});

如果您需要绑定一个事件并且只想使用它,然后让它自动取消绑定,您可以使用one()这样的

$("#myButton").one("click", function(){
    // ....
});

只是为了澄清你可以自己使用off()unbind(),而不将它们链接到on()bind()等等。尽管{ {1}}如果您碰巧使用unbind()进行绑定。 live()的许多缺点之一是:

  

.live()方法可以通过其他方式与其他事件方法进行交互   令人惊讶的是,例如,$(document).unbind(“click”)删除所有点击   通过调用.live()来附加处理程序!

其他资源

click() - 类似于bind
bind() - jQuery 1.7之前静态元素的首选绑定 live() (don't use) - 自1.7以来弃用,但不使用pre 1.7 delegate() - jQuery 1.7之前动态元素的首选绑定 on() - 自jQuery 1.7以来对静态/动态元素的首选绑定

答案 1 :(得分:0)

根据您对事件的约束方式,您需要使用.unbind().off()(如果您使用的是.live(),则不推荐使用.on(),您应该切换到{{1} })

jQuery在Namespaced Events上有一个很好的页面,它说明了如何解除绑定你添加的事件处理程序。

答案 2 :(得分:0)

我正在使用.live()

我发现对我来说最简单的解决方案是在每个.die()声明之前添加.live()

示例:

$('.add').die();
$('.add').live(...............

http://api.jquery.com/die/