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:绑定和取消绑定实时点击事件的主要内容,如果未能解决你的问题,请参考以下文章
fullcalendar 为放置在事件上的可点击图标取消绑定 eventClick 方法