2013-03-17 100 views
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> 
+0

你如何加载新的问题?通过页面刷新或通过ajax调用?使用阿贾克斯将尽量减少页面重新加载 – Amitd 2013-03-17 11:09:51

+0

我不得不问 - 为什么你要存储经过的秒数而不是开始时间?通过存储服务器启动时间,您的应用程序可以提供更加真实的结果,并且不会因给服务器等造成任何失真。 – Paul 2013-03-17 11:18:47

回答

2

从一个页面到另一个页面使用ajax pass值。使用会话保持最后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> 
+0

谢谢....满足我的要求。 – 2013-03-21 05:51:57

3

JavaScript变数并不意味着活得比当前页面负载。浏览器的JavaScript引擎会在每次页面加载时执行代码(尽管most browsers cache the complied code),所以只要页面重新加载,客户端变量就会丢失。

有几种常用的方法来从一个网页值传递给另一:经由GET或POST请求

无论方法

  1. DOM storage
  2. Cookies
  3. 服务器端变量您选择,请记住它需要充分适应用户不需要的操作。

相关问题