jQuery:绑定和取消绑定实时点击事件

Posted

技术标签:

【中文标题】jQuery:绑定和取消绑定实时点击事件【英文标题】:jQuery: Binding and Unbinding Live Click Events 【发布时间】:2010-12-20 10:30:21 【问题描述】:

所以我的问题有两个限制:

    我必须在点击事件中使用外部函数调用,并且 我必须使用实时点击事件,而不是绑定典型的点击事件。

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

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

【问题讨论】:

【参考方案1】:

你可以使用这个模式来解除被点击的元素的绑定,让所有其他的活下去:

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

    // do things

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

    return false; // block the link
);

适用于 JQUERY 1.8.2

【讨论】:

【参考方案2】:

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

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

【讨论】:

【参考方案3】:

根据documentation:

实时事件目前仅在用于选择器时才有效。

$(this) 不是选择器。

【讨论】:

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

以上是关于jQuery:绑定和取消绑定实时点击事件的主要内容,如果未能解决你的问题,请参考以下文章

jquery绑定事件on()方法

fullcalendar 为放置在事件上的可点击图标取消绑定 eventClick 方法

vue.js怎样移除绑定的点击事件

jquery如何 绑定Load事件 到一个元素上

jQuery绑定点击事件和改变事件的几种方式以及多个元素绑定多个事件

jquery 动态添加节点怎么绑定事件