2012-02-09 16 views
0

クリックして表示されるjqueryポップアップがあります。同じセレクタをクリックしたときに再び非表示にする必要があります。しかし、現時点では、それはちょうど点滅してリロードされます。セレクタではない場所をクリックすると閉じるように設定していますが、これは本当に必要なものではありません。jqueryのツールチップ - クリックして開くと閉じる

これは完全に動作する私のコードですが、もう一度クリックすると非表示にする方法を知る必要があります。

基本的に私が知る必要があるのは、どのセレクタがクリックされたかを追跡する方法です(同じクラスのすべての同じページでクリックできる複数のアイテムがあります)ので、再度クリックすると言うことができますそれを閉じる?

$(document).ready(function(){ 
     $("#tooltip").hide(); 
     $("a.highScoreTooltip").click(function(){            
      var game = $(this).attr('title'); 
      var offset = $(this).offset(); 
      var top = offset.top - 43; 
      var left = offset.left + 155; 
      $.ajax({ 
       type: "POST",  
       data: 'game=' + game, 
       url: "<?=$server_url?>leaderboard_popup.php", 
       cache: false, 
       success: function (html) { 
        $("#tooltip").show(); 
        $("#tooltip").html(html); 
        $("#tooltip") 
         .css("top",top + "px") 
         .css("left",left + "px") 
         .fadeIn("fast"); 
       }  
      }); 
     }); 
     jQuery(document).delegate(':not(#tooltip)', 'click', function(){ 
      $('#tooltip').hide(); 
     }); 
    }); 
+0

、あなたはCSSクラス([.addClass()]を追加することができます(http://api.jquery.com/addClass /))をクリックして別のクリックで削除します([。removeClass()](http://api.jquery.com/removeClass/))。 – marioosh

+0

@mariooshこれはクラスを使うのは少し不必要です。なぜならそれは1つのプロパティだけが変更されているからです(そして、その特定のプロパティをそのまま変更するのに十分なjQuery関数があります)。 '.toggleClass()'を使用せず、手動でテストする手間を省きます。 –

答えて

2

コードのこのセクションで.toggle("fast").fadeIn("fast");を交換してみてください:

$("#tooltip") 
    .css("top",top + "px") 
    .css("left",left + "px") 
    .fadeIn("fast"); 

はあなたにまったく同じアニメーションを(あなたが望む答えではないかもしれない)を得ないかもしれないが、それは隠しを処理します/簡単に表示されます。

+0

これは、同じセレクタをクリックしたときに機能しますが、次のセレクタに移動してコンテンツを表示するのではなく、ポップアップが既に表示されている場合に別のセレクタ(ポップアップを表示)をクリックすると消えます。 – rosc0

0

まず、委任の代わりにhttp://api.jquery.com/on/を使用する必要があります。もちろん、.click()の方法を使用できます。必要なのは、クリック時にオブジェクトの現在の状態を読み込むことだけです。表示されている場合は非表示にし、表示しない場合は非表示にします。グローバル変数を使用するか、visibleセレクタを使用してこれを実現できます。あなたがそのようなtoggleを使用することができます

+0

これは、使用しているjQueryのバージョンによって異なります。1.7より前のバージョンを使用している人には、 '.delegate()'関数が推奨されています。 –

+0

ああポイントを取った:) –

1

:セレクタがクリックされたことを追跡するために

$('#book').toggle('slow', function() { // or toggle(showOrHide) 
    $("a.highScoreTooltip").click(function(){            
      var game = $(this).attr('title'); 
      var offset = $(this).offset(); 
      var top = offset.top - 43; 
      var left = offset.left + 155; 
      $.ajax({ 
       type: "POST",   
       data: 'game=' + game,  
       url: "<?=$server_url?>leaderboard_popup.php", 
       cache: false, 
       success: function (html) { 
        $("#tooltip").show(); 
        $("#tooltip").html(html); 
        $("#tooltip") 
         .css("top",top + "px") 
         .css("left",left + "px") 
         .fadeIn("fast"); 
       }  
      }); 
     }); 
    }); 
関連する問題