2012-03-15 17 views
2

私はJavaScriptを使い慣れていません。このスクリプトに問題があります。 それはウェブゲームの一部であり、スクリプトはプレーヤーが勝つか失われるまでページをリフレッシュすることを想定しています。 何らかの理由でそれがリフレッシュを止めることはなく、機能が動作しているかどうかを確認するアラート機能を置いて、アラートを取得しますが、それでもページをリフレッシュし続けます。 何が間違っていますか?なぜclearInterval()が機能しないのですか?

var t; 

$(document).ready(function() { 
    intervals(); 
}); 
function intervals() { 
    t = self.setInterval('refreshData()', 10000); 
} 
function youWin() { 
    var f = $('#status:contains("YOU ARE THE WINNER!")'); 
    if (f.length > 0) { 
     alert("YOU ARE THE WINNER!"); 
     t = clearInterval(t); 
    } 
} 
function youlose() { 
    var f = $('#status:contains("You lost!")'); 
    if (f.length > 0) { 
     alert("You lost!"); 
     t = clearInterval(t); 
    } 
} 
function refreshData() { 
    $('#ajaxGame').load('RefreshCurrentPlayerServlet #ajaxGame'); 
    youWin(); 
    youlose(); 
} 

答えて

4

あなたはselfへの参照を修正し​​コールを修正する必要があります。

​​は非同期なので、直後にyouWin()youLose()を呼び出す前に完了しません。​​が正常に完了した後、勝敗を確認できるように完了機能が必要です。

refreshData()は、このような構造にする必要があります。

function refreshData() { 
    $('#ajaxGame').load('RefreshCurrentPlayerServlet #ajaxGame', function() { 
     youWin(); 
     youlose(); 
    }); 
} 

ます。また、この変更する必要があります。これに

t= self.setInterval('refreshData()',10000); 

t = window.setInterval(refreshData, 10000); 

を私はselfもあったことが表示されませんあなたの問題を引き起こしている可能性もあるので、関数リファレンスを直接文字列に入れるのではなく、直接呼び出します。

t = clearInterval(t); 
これまで

clearInterval(t); 

ここでは、グローバル変数を排除し、コードのクリーンアップバージョンだと

そして、クリーンアップの問題として、あなたはこの両方の出現箇所を変更する必要があります不必要な関数定義:

$(document).ready(function() { 
    var t = window.setInterval(function() { 
     $('#ajaxGame').load('RefreshCurrentPlayerServlet #ajaxGame', function() { 
      youWin(); 
      youlose(); 
     }); 
    }, 10000); 

    function youWin() { 
     if ($('#status:contains("YOU ARE THE WINNER!")').length) { 
      alert("YOU ARE THE WINNER!"); 
      clearInterval(t); 
     } 
    } 

    function youlose() { 
     if ($('#status:contains("You lost!")').length) { 
      alert("You lost!"); 
      clearInterval(t); 
     } 
    } 

}); 
+0

ありがとう、それはまだ2-3回爽快ですが、それはevです事実上停止する。 load()関数が実行されていないことに気付きませんでした。おかげさまで – kirlev

+0

@ user1090448 - javascriptエラーコンソールまたはデバッガコンソールにエラーが表示されますか。間隔は、エラーが発生するまで、または停止するまで継続します。 – jfriend00

+0

いいえ、エラーはありません。コンソールにもネット・ビーン・デバッガーにもありません(サーブレット・エラーなし)。 – kirlev

関連する問題