1

タイマー付きの静的変数のように、JavaScriptでカウンター変数を使用したいと思います。カウンターは毎秒1ずつ減少する必要があります。私はオンライン試験に取り組んでいます。質問に答えると、同じページに新しい質問が表示されます。私の問題は、カウンター変数が新しい質問(新しいページを意味する)で初期化されたときに始まります。カウンター変数が新しいページに保持されない...解決策を提案する

<script language="JavaScript">

function ExamTimer() 
{   
if ( typeof ExamTimer.counter == 'undefined' )   
{   
ExamTimer.counter = 30000;  // 30 min
    }
else
{

 ExamTimer.counter = ExamTimer.counter-1;   
    if(ExamTimer.counter<=0)
    {
          alert("exam finish");
     }
setTimeout(ExamTimer, 1000);

  }
window.onload=ExamTimer;
</script>
4

2 に答える 2

3

Javascript 変数は、現在のページの読み込みを超えて存続することを意図したものではありません。ブラウザーの Javascript エンジンは、ページが読み込まれるたびにコードを実行します (ただし、ほとんどのブラウザーはコンパイルされたコードをキャッシュします)。そのため、ページがリロードされるたびにクライアント側の変数が失われます。

あるページから別のページに値を渡す一般的な方法がいくつかあります。

  1. DOM ストレージ
  2. クッキー
  3. GET または POST リクエストによるサーバー側変数

どのような方法を選択する場合でも、ユーザーによる望ましくない操作に対して適切な回復力が必要であることを忘れないでください。

于 2013-03-17T11:02:54.147 に答える
2

あるページから別のページへの ajax パス値の使用。セッションを使用して最後のremainTimeタイを保持し、次のページに渡します

<script language="JavaScript">

 function ExamTimer() 
 {   
 if ( typeof ExamTimer.counter == 'undefined' )   
 {   
  ExamTimer.counter = <cfoutput>#session.RemainTime#</cfoutput>;
  }
  else
   {

 ExamTimer.counter = ExamTimer.counter-1; 
 $.get('linktosend.cfm',{counter:ExamTimer.counter},function(responseText)
    { 
// value of ExamTimer.counter send to linktosend.cfm and store in session.RemainTime           
 });  
 if(ExamTimer.counter<=0)
 {
       alert("exam finish");
 }
setTimeout(ExamTimer, 1000);

 }
 window.onload=ExamTimer;

 </script>
于 2013-03-18T11:39:19.053 に答える