我有一个页面,我有一个产品配置器,这个配置器使用ajax .load来加载不同产品的配置器。
如果某人配置了产品,则单击“提交”,添加产品,如果用户再次选择配置程序,并加载相同的产品,则配置程序的所有事件都会加倍。意思是,所有事件都会发生两次......
重置这些事件或阻止这些事件多次触发的最佳方法是什么?
答案 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(...............