【问题标题】:jQuery: unbind event that was bound with live()jQuery:取消绑定与 live() 绑定的事件
【发布时间】:2012-02-20 20:40:35
【问题描述】:

我有一个包含五个列表项的无序列表,每个列表项内部都有一个链接:

链接有一个通过live()绑定到它们的点击功能:

$("a").live("点击", function(){ ... });

该函数内部是一个get 请求,用于检索一些信息。

所以,当点击这些链接中的任何一个时,我想阻止点击任何 other 链接执行任何操作,直到 get 完成。我想我可以通过使用die()解除点击事件来做到这一点:

$("a").live("点击", function(){ $("a").not(this).die("click"); ... });

但这不起作用。我没有收到任何错误 - 它只是不会阻止点击事件。我做错了什么?

【问题讨论】:

  • 试试 $("a").die();删除 $("a") 上使用 live 或仅 $("a").die("click"); 安装的所有事件处理程序;为了你想要的
  • live() 已弃用,请使用 on() 和 off()

标签: jquery click bind live die


【解决方案1】:

这里的问题是您试图在一组不同的元素上使用live 和die。为了正常运行,您必须将live 和die 应用于相同的选择器/元素集。

$('a').live('click', function () { ... });
$('a').die(); // Ok! 
$('a').each(function () {
  $(this).die();  // Doesn't work.  
});

听起来您只想暂时禁用此功能,直到特定操作完成。如果是这样,那么您可以使用句柄 / dontHandle 开关来执行此操作。

(function() {
  var doHandle = true;
  $('a').live('click', function() {
    if (!doHandle) {
      return;
    }

    // Don't handle any events until the 'get' is complete
    doHandle = false;
    doGet(this, function() { 
      // Call back for when the get is complete.  Start handling again
      doHandle = true; 
    });
})();

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-12-20
    • 1970-01-01
    • 1970-01-01
    • 2012-02-29
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多