2017-01-07 2 views
-2

私は60秒で答えられるように10の質問でJavascriptタイムクイズを作成しています。競技者が50〜60秒で質問を試みるとうまくいきますが、短い時間で試してクイズを再開すると、タイマーは2倍のスピードで動作します。以前のタイマーがクリアされていない可能性があります。ここでのスクリプトは次のとおりです。setIntervalをキャンセルできません

$(window).ready(function() { 
    $('#fblock').hide(); 
    $('#sblock').show(); 
    $('#qblock').hide(); 
    $('.startquiz').click(function() { 
     qsi = 0; 
     score = 0; 
     showq(0); 
     $('#fblock').hide(); 
     $('#sblock').hide(); 
     $('#qblock').show(); 

     var secs = 0; 
     var id = setInterval(function() { 
      secs++; 
      console.log(secs); 
      document.getElementById("timer").innerHTML++; 
      if (secs > 60) { 
       clearInterval(id); 
       $('#result').html(score); 

       $('#qblock').hide(); 
       $('#fblock').show(); 
      } 
     }, 1000); 
    }); 
    $('.restartquiz').click(function() { 
     $('#fblock').hide(); 
     $('#sblock').show(); 
     $('#qblock').hide(); 
     document.getElementById("timer").innerHTML = 0; 
    }); 
}); 
+0

私が行方不明 '}を追加しました);'コードの末尾に、http://jsbeautifier.orgを通してそれを通過し、あなたのために上記の投稿に正しくマークアップしてください。 –

+0

ありがとう、私はあなたがそれをフォーマットしている間に編集に苦労していました。 – DKumar

答えて

0

私にとって間隔がキャンセルされます唯一の時間は、「タイマー」(secs)は、実際に60 倍の速度の数は​​によって説明できるexeedsとき、あるように見えますそれは(クイズを再起動した後で)2回(開始間隔ごとに1回)実行されます。

.restartquizボタンを押したときに実行される関数の間隔をキャンセルしてみてください。

これが(未テスト)のようなもののようになります。

var interval = null; 
$(window).ready(function() { 
    $('#fblock').hide(); 
    $('#sblock').show(); 
    $('#qblock').hide(); 
    $('.startquiz').click(function() { 
     qsi = 0; 
     score = 0; 
     showq(0); 
     $('#fblock').hide(); 
     $('#sblock').hide(); 
     $('#qblock').show(); 
     var secs = 0; 
     interval = setInterval(function() { 
      secs++; 
      console.log(secs); 
      document.getElementById("timer").innerHTML++; 
      if (secs > 60) { 
       clearInterval(interval); 
       $('#result').html(score); 

       $('#qblock').hide(); 
       $('#fblock').show(); 
      } 
     }, 1000); 
    }); 
    $('.restartquiz').click(function() { 
     $('#fblock').hide(); 
     $('#sblock').show(); 
     $('#qblock').hide(); 
     clearInterval(interval); 
     document.getElementById("timer").innerHTML = 0; 
    }); 
}); 
+1

質問をすることは答えではありません。問題を尋ねる代わりに、インターバルタイマをキャンセルするソリューションを提供してください。これは、このサイトの全体のポイントです...予期したとおりに動作していない救済コード – charlietfl

+0

ヒントを与え、期待通りにキャンセルされないようにしてください(私の意見では、コマンドに従わないためです)。正解。このサイトは、他人の仕事をすることではなく、次に見たい場所を知っているので、正しいアイデアを提供することです。 – coincoder

+0

あなた自身の問題を解決するためにこのサイトを何度も検索し、ヒント以外の何かを見つけましたか?問題は明確に述べられており、OPは助けを求めている。あなたがその助けを提供する準備ができていない場合は、私は答えを更新しました – charlietfl

関連する問題