0

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

私のポイントは、サーバーにアクセスする前に待機することです。ユーザー<td>がこの実行中のカウントダウン (900ms) でマウスを別の場所に移動すると、前のカウントダウンが中止され、新しいカウントダウンが行われます。

        $(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);
                });
        });
4

1 に答える 1

1

timerホバー機能の外側のスコープに保存する必要があります。どちらのスコープについてもよくわからないので、これが機能しない場合は、次のように同じスコープにisLoading移動してみてください。isLoadingtimer

    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 ステートメントの最初の条件が無意味になります。varbeforeSend 関数のステートメントも削除しました。

于 2011-07-09T21:08:23.747 に答える