jQuery: 绑定和解绑Live Click事件

11

我的问题有两个限制:

  1. 必须在点击事件中使用外部函数调用。
  2. 必须使用 live click 事件,而不是绑定一个典型的 click 事件。

我的问题是,我正在尝试在单击事件发生后取消该事件的绑定,然后在单击事件代码完成后重新绑定它。我这样做是为了防止在代码当前正在处理时出现重复单击(我有 fadeIn/Out 动画,它将允许按钮被快速点击两次或三次,从而执行我的代码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()中的代码以重新绑定活动点击。

有什么想法吗?任何帮助都将不胜感激。谢谢。

3个回答

8
根据文档

当只针对选择器使用时,现有的Live事件才能正常工作。

$(this)不是一个选择器。


@Greg,有趣。也许如果我在函数中分配了live click事件,如下所示:var $tempVar = $('#' + $(this).attr('id')),然后说$tempVar.live("click", handleClick),你认为这会起作用吗? - Matt

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


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接