jQuery:与live()绑定的unbind事件

时间:2012-02-20 20:40:35

标签: jquery click bind live die

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

<ul>
    <li><a href="#">Link 1</a></li>
    <li><a href="#">Link 2</a></li>
    <li><a href="#">Link 3</a></li>
    <li><a href="#">Link 4</a></li>
    <li><a href="#">Link 5</a></li>
</ul>

链接的点击功能与live()

绑定在一起
$("a").live("click", function(){
    ...
});

此函数内部是get请求,用于检索某些信息。

因此,当点击任何这些链接时,我希望阻止点击任何其他链接,直到get完成为止。我认为我可以通过将点击事件与die()取消绑定来实现此目的:

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

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

1 个答案:

答案 0 :(得分:3)

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

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

听起来你只想暂时禁用它,直到特定操作完成。如果是这样,那么您可以使用handle / 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; 
    });
})();