在jQuery中,有没有办法只绑定一次点击?

我有一个ajax应用程序,它将在每次交互时运行函数。 我希望每次都能运行我的设置function,所以我的所有设置代码都保持封装状态。 但是,绑定元素不止一次意味着处理程序将运行多次,这显然是不可取的。 在jQuery中是否有一种优雅的方式可以多次调用一个元素上的bind而不会多次调用该处理程序?

您可以使用one()函数将事件附加到document

 $(document).one('click', function(e) { // initialization here }); 

运行后,将再次删除此事件处理程序,以使其不再运行。 但是,如果您需要在其他元素的click事件之前运行初始化,我们将不得不考虑其他事情。 然后使用mousedown而不是click可以工作,因为在click事件之前触发了mousedown事件。

用户jQuery就像Tom说的那样,但是每次绑定之前解除处理程序的绑定。 将事件处理程序分配给变量比使用匿名函数更有帮助。

  var handler = function(e) { // stuff }; $('#element').unbind('click', handler).one('click', handler); //elsewhere $('#element').unbind('click', handler).one('click', handler); 

您还可以执行.unbind('click')删除附加到元素的所有单击处理程序。

如果unbind不能解决问题,你也可以使用.off()。 确保给.off的选择器和事件与最初提供给.on()的选择器和事件完全匹配:

 $("div.selector").off("click", "a.another_selector"); $("div.selector").on("click", "a.another_selector", function(e){ 

这对我解决相同的ajax重载问题起了作用。

Chetan Sastry的答案就是你想要的。 基本上只需调用$(元素).unbind(event); 在每个事件之前。

所以,如果你有一个像loadAllButtonClicks()这样的函数包含所有的函数

 $(element).on("click", function (){}); 

页面上每个按钮的方法,并且每次单击按钮时都会运行该按钮,这显然会为每个按钮生成多个事件。 解决这个问题只需添加

 $(element).unbind(event); 

每个人之前

 $(element).on("click", function (){}); 

它将取消绑定该元素的所有事件,然后添加单击事件。