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

Javascript 在jQuery中,有没有办法只绑定一次单击?,javascript,jquery,Javascript,Jquery,我有一个ajax应用程序,可以在每次交互中运行函数。我希望每次都能运行我的设置函数,以便该函数的所有设置代码保持封装状态。但是,多次绑定元素意味着处理程序将运行多次,这显然是不可取的。jQuery中是否有一种优雅的方法可以多次调用元素上的bind,而不必多次调用处理程序?您可以使用one()函数将事件附加到文档中: $(document).one('click', function(e) { // initialization here }); 运行后,将再次删除此事件处理程序,使其不

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

您可以使用
one()
函数将事件附加到
文档中:

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

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

用户jQuery
如Tom所说的一个
函数,但每次在再次绑定之前都会解除处理程序的绑定。将事件处理程序分配给变量比使用匿名函数更有帮助

 var handler = function(e) { // stuff };

 $('#element').unbind('click', handler).one('click', handler);

 //elsewhere
 $('#element').unbind('click', handler).one('click', handler);

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

Chetan Sastry的答案就是您想要的。基本上只需调用$(元素);每次活动之前

因此,如果您有一个类似loadAllButtonClicks()的函数,它包含所有

$(element).on("click", function (){}); 
方法,并且每次单击按钮时都会运行该方法,这显然会为每个按钮生成多个事件。要解决这个问题,只需添加

$(element).unbind(event);

$(element).on("click", function (){}); 
它会将所有事件解除绑定到该元素,然后添加一次单击事件。

如果解除绑定不起作用,也可以使用.off()。确保提供给.off的选择器和事件与最初提供给.on()的选择器和事件完全匹配:


这就是我在解决同样的ajax重新加载问题时所做的工作。

您缺少了一个
在那里。这只能部分解决他的问题。使用
one
多次附加事件仍将运行多次,但每次运行一次。@Chetan:我不太明白。只有一个
document
对象(事件会在其中冒泡),那么我如何多次附加事件呢?@Tom see。。每次单击
Attach click handler
,然后单击文档中的任意位置时,附加的事件处理程序将执行一次。此外,将事件处理程序附加到文档与将其附加到任何其他元素没有什么不同。再次阅读这个问题,我并不完全清楚。为什么需要多次将事件处理程序绑定到元素?我喜欢这样做,因为$(元素).unbind(事件);解决方案将从元素中删除该类型的所有事件(例如,单击),而此方法仅删除与所讨论的选择器相关的事件,并将其他事件保持连接,即使它们共享相同的事件类型。
$("div.selector").off("click", "a.another_selector");    
$("div.selector").on("click", "a.another_selector", function(e){