3

5 つのリスト アイテムを含む順序付けられていないリストがあり、それぞれにリンクが含まれています。

<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.  
});

特定の操作が完了するまで、これを一時的に無効にしたいようです。その場合は、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; 
    });
})();
于 2012-02-20T20:50:56.283 に答える