2011-07-09 21 views
0

<td>をホバーすると、900ミリ秒待ってから、多くのリクエストが送信されます(これらの900ミリ秒では、常により多くの時間が表示されます)。私は間違って何をしていますか?なぜclearTimeout(コメントされました)のみが機能しますか?ajaxリクエストを送信する前の遅延は機能しません

私のポイントは、サーバを打つ前に、この実行中のカウントダウン(900ms)内の別の<td>にユーザ移動マウスは、前のカウントダウンが中止され、新しいものはあなたがtimerを保存する必要があります場所

 $(function(){ 
       var isLoading = false; 
       $("td").hover(function(){ 
         var x = parseInt(0); 
         var position = $(this).attr('id'); 
         clearTimeout(timer); 
         var oID = $(this).attr('id'); 
         var oData = $(this); 
         var timer = setTimeout(function(){ 
           if (position == oID&&!isLoading) 
           { 
             clearTimeout(timer); 
             $.ajax({ 
               beforeSend: function(xhr){ var isLoading = true; }, 
               url: 'ajax.php?what=click&position='+position, 
               success: function(data){ 
                 $('#hovercard').css(oData.offset()); 
                 $('#hovercard').show(); 
                 $('#hovercard').html(data); 
               } 
             }); 
           } 
         }, 900); 
// this only works ->            clearTimeout(timer); 
       }); 
     }); 

答えて

1

がかかる場合待つことですホバー機能の外のスコープ内にある。私はどちらかisLoadingのスコープについてとてもよく分からないので、これが動作しない場合は、timerと同じスコープに出isLoadingを移動してみてください:

var timer; 
    $(function(){ 
      var isLoading = false; 
      $("td").hover(function(){ 
        var x = parseInt(0); 
        var position = $(this).attr('id'); 
        clearTimeout(timer); 
        var oID = $(this).attr('id'); 
        var oData = $(this); 
        timer = setTimeout(function(){ 
         if (position == oID&&!isLoading) 
         { 
           clearTimeout(timer); 
           $.ajax({ 
             beforeSend: function(xhr){ isLoading = true; }, 
             url: 'ajax.php?what=click&position='+position, 
             success: function(data){ 
                $('#hovercard').css(oData.offset()); 
                $('#hovercard').show(); 
                $('#hovercard').html(data); 
             } 
           }); 
         } 
        }, 900); 
      }); 
    }); 

はあなたにもいくつかの他の奇妙を持っています。 oIDは同じスコープ内で同時に設定されるので、常にpositionと等しくなることに注意してください。これにより、if文の最初の条件が無意味になります。 beforeSend関数の varステートメントも削除しました。

関連する問題