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

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

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

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

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

【问题讨论】:

    标签: jquery click bind live die


    【解决方案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),你认为这会起作用吗?
        猜你喜欢
        • 2010-12-20
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2014-09-04
        相关资源
        最近更新 更多