2009-11-25 85 views
11

因此有两个约束我的问题:jQuery的:绑定和解除绑定直播点击活动

  1. 我必须用我的单击事件的外部函数调用,并
  2. 我必须使用现场点击事件,而是绑定一个典型的点击事件。

所以我的问题是,我试图解除绑定click事件它发生之后,再重新绑定,一旦点击事件代码完成。我这样做是为了防止在代码当前正在处理的过程中出现重复点击(我有淡入/淡出动画,可以让按钮快速点击两次或三次,从而执行我的代码2到3次,这是所期望的) 。我使用的代码如下:

$item.live("click", handleClick); 

function handleClick(ev) { 

    $(this).die("click"); 

    // perform code here, including things with 'ev' 

    $(this).live("click", handleClick); 
} 

我疯了,还是这应该是没有问题的工作?现在,我可以点击一次,但之后不会再次点击。显然,die()正在工作,但由于某种原因它不会被重新绑定到该函数。我已经验证它确实会触及handleClick()中的代码以重新绑定实时点击。

任何想法?任何帮助将不胜感激。谢谢。

回答

8

按照documentation

直播目前事件对选择使用时,唯一的工作。

$(this)不是选择器。

+0

@格雷格,有趣。也许如果我在函数中分配了实时点击事件,就像这样:'var $ tempVar = $('#'+ $(this).attr('id'))',然后说'$ tempVar.live(“click “,handleClick)'你认为这会起作用吗? – 2009-11-25 19:25:31

+0

我*认为*所以... – Greg 2009-11-25 19:46:54

+2

是的,这将工作 – PetersenDidIt 2009-11-26 02:00:16

6

解除绑定从使用.live(绑定所有的点击处理程序),使用.die()方法:

$(".clickme").die("click"); 
0

您可以使用此模式来解除绑定点击的元素,让所有其他人住:

$('a.myselector').live('click', function() { 

    // do things 

    $(this).unbind('click').live('click', function() {return false;}); 

    return false; // block the link 
}); 

作品使用jQuery 1.8.2