javascript计时器

时间:2009-08-07 05:05:19

标签: asp.net-2.0

我正在使用asp.net开发在线考试应用程序,在开始考试页面我创建了一个javascript倒计时器,如何在计时器达到00后自动移动到下一页,这里是我的代码

long timerStartValue = 1000;

private int TimerInterval
{
    get
    {
        int o =(int) ViewState["timerInterval"];
        if(o==0)
        {

            return (o);
        }
        return 50 ;
    }
    set
    {
        ViewState["timerInterval"] = value;

    }
}

protected void Page_PreInit(object sender,EventArgs e)
{
    string timerVal = Request.Form["timerData"];
    if(! String.IsNullOrEmpty(timerVal))
    {
        timerVal = timerVal.Replace(",", String.Empty) ;
        this.timerStartValue = long.Parse(timerVal);

    } 
}

protected void Page_Load(object sender, EventArgs e)
{
  if(! IsPostBack)
  {
      this.timerStartValue = 10000; //3599000;//14400000;
        this.TimerInterval = 500;
   }
}
protected void Button1_Click(object sender, EventArgs e)
{
    this.timerStartValue = 3599000;
}

protected void Page_PreRender(object sender, EventArgs e) 
{
   System.Text.StringBuilder bldr=new System.Text.StringBuilder();
    bldr.AppendFormat("var Timer = new myTimer({0},{1},'{2}','timerData');", this.timerStartValue, this.TimerInterval, this.lblTimerCount.ClientID);
    bldr.Append("Timer.go()");

    ClientScript.RegisterStartupScript(this.GetType(), "TimerScript", bldr.ToString(), true);
    ClientScript.RegisterHiddenField("timerData", timerStartValue.ToString());
}

提前 桑吉塔

4 个答案:

答案 0 :(得分:0)

听起来就像点击“下一步”按钮,您正在加载一个全新的页面。这当然会改变所有内容并重置所有的javascript。如果没有一点工作,就无法跨页维护状态。

解决方法可能是在按下下一个按钮时保存计时器状态,并将其传递给下一个阶段。您可以通过将计时器状态保存到隐藏表单输入并将其与“下一步”按钮一起提交来完成此操作。

另一种选择是通过AJAX加载你的问题。每次单击下一个按钮时,您都可以简单地用新问题替换页面的问题部分,并保持计时器不变,而不是移动到新页面。这可能是我将使用的解决方案。

答案 1 :(得分:0)

点击下一个按钮是否重新加载整个页面?这可能会导致java脚本文件的操作。因此变量值将重置。您可以考虑通过Ajax显示问题/答案。您在显示下一个问题时无需重新加载整个页面。当您显示时,该部分测验只会更新。所以你也可以在java脚本中维护全局变量。请查看以下链接,了解使用jQuery进行部分页面更新。

http://www.west-wind.com/presentations/jquery/jquerypart2.aspx

希望这有帮助。

答案 2 :(得分:0)

如果无法摆脱回发,可以将计时器放在iframe中。

答案 3 :(得分:0)

您需要一种在页面之间保留信息的方法,并且实际上只有一种可能性:使其成为下一页请求的一部分。

现在,这可以细分为两类:

1)作为网址的一部分:http://www.example.com/page?timer=123;

2)作为标题的一部分;

第2号开启了新的可能性:

a)作为POST数据的一部分;

b)仅作为客户端cookie;

c)作为与服务器上的信息相关的cookie;

用户可以操纵编号1,2a和2b。因此,您可以做的是在cookie中存储一些值,例如哈希值或数据库行ID,您将用它来获取服务器上的信息。

TL;博士?使用asp“Session对象”。它可以让你把东西放在服务器端,用户也不知道它们是什么。