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

时间:2010-06-01 04:07:34

标签: javascript jquery

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

4 个答案:

答案 0 :(得分:12)

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

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

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

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

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

答案 1 :(得分:8)

您可以使用document功能将事件附加到one()

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

运行后,将再次删除此事件处理程序,以便它不会再次运行。但是,如果您需要初始化以在之前运行某个其他元素的click事件,我们将不得不考虑其他内容。然后使用mousedown代替click可能会有效,因为在点击事件之前触发了mousedown事件。

答案 2 :(得分:2)

如果unbind没有做到这一点,你也可以使用.off()。确保给.off的选择器和事件与最初提供给.on()的选择器和事件完全匹配:

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

这对解决相同的ajax重装问题有用。

答案 3 :(得分:1)

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

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

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

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

即可
$(element).unbind(event);

每个

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

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