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("点击", function(){
    ...
});

这个函数内部是一个get检索一些信息的请求。

因此,当单击这些链接中的任何一个时,我想阻止对任何其他链接的单击执行任何操作,直到get完成为止。我想我可以通过取消绑定点击事件来做到这一点die()

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

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

4

1 回答 1

3

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

$('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; 
    });
})();
于 2012-02-20T20:50:56.283 回答