jQuery:解除使用live()绑定的事件

3
我有一个无序列表,其中包含五个列表项,每个列表项内都有一个链接:
<ul>
    <li><a href="#">链接1</a></li>
    <li><a href="#">链接2</a></li>
    <li><a href="#">链接3</a></li>
    <li><a href="#">链接4</a></li>
    <li><a href="#">链接5</a></li>
</ul>
这些链接绑定了一个使用 live() 的点击函数:
$("a").live("click", function(){
    ...
});
在这个函数内部,有一个 get 请求来获取一些信息。
所以,当任何一个链接被点击时,我想阻止其他链接的点击事件,直到 get 请求完成。我认为可以通过使用 die() 来解除点击事件的绑定来实现这一点:
$("a").live("click", function(){
    $("a").not(this).die("click");
    ...
});
但是这并不起作用。我没有收到任何错误消息,只是无法阻止点击事件。我做错了什么?

尝试使用 $("a").die(); 删除所有使用 live 安装的或者只是 $("a") 上安装的事件处理程序,或者使用 $("a").die("click"); 来删除你想要的内容。 - hackartist
1
"live()"已被弃用,请使用"on()"和"off()"。 - elclanrs
1个回答

3
这里的问题在于你试图在不同的元素集上使用“live”和“die”。为了正确运行,你必须将“live”和“die”应用于相同的选择器/元素集。
$('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; 
    });
})();

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接