定时器重设在下一页 [英] Timer resetting on next page

查看:87
本文介绍了定时器重设在下一页的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

亲爱的所有人,

最近两天以来,我一直对此问题感到困惑.
我需要的是仅在页面加载时一次调用Javascript.
我的应用程序是一个有限时间的在线测试.当用户开始接受测试时,应该开始计时了.工作正常.
但是问题是当他们单击下一步"按钮转到下一个问题时,时间是从第一个开始重置和加载.
这是我的aspx代码:


Dear All,

I got confused with this issue since last two three days.
What I need is to call a Javascript one time only at the time of the page load.
My application is an Online Test with limited time period. When the user starts to take up the test, the time should start. Its working fine.
But the problem is when they will click the next button go to next question, the time is resetting and loading from first.
Here my aspx code:


 <script language="javascript" type="text/javascript">
        var mins
        var secs;
        function cd() {
            var tmin = document.getElementById("txtMin").value;
            mins = tmin * m("1");
            secs = 0 + s(":01");
            redo();
        }

        function m(obj) {
            for (var i = 0; i < obj.length; i++) {
                if (obj.substring(i, i + 1) == ":")
                    break;
            }
            return (obj.substring(0, i));
        }

        function s(obj) {
            for (var i = 0; i < obj.length; i++) {
                if (obj.substring(i, i + 1) == ":")
                    break;
            }
            return (obj.substring(i + 1, obj.length));
        }

        function dis(mins, secs) {
            var disp;
            if (mins <= 9) {
                disp = " 0";
            } else {
                disp = " ";
            }
            disp += mins + ":";
            if (secs <= 9) {
                disp += "0" + secs;
            } else {
                disp += secs;
            }
            return (disp);
        }

        function redo() {
            secs--;
            if (secs == -1) {
                secs = 59;
                mins--;
            }
            document.cd.disp.value = dis(mins, secs);
            if ((mins == 0) && (secs == 0)) {
                window.alert("Time is up. Press OK to continue.");
            } else {
                cd = setTimeout("redo()", 1000);
            }
        }

        function init() {
            cd();
        }
        
      
    </script>

<pre lang="xml"><asp:UpdatePanel runat="server" ID="TimePanel">
                                        <Triggers>
                                        </Triggers>
                                        <ContentTemplate>
                                            <input id="txt" readonly="true" type="text" value="10:00" border="0" name="disp" /><asp:TextBox
                                                ID="txtMin" Text="25" runat="server">
                                            </asp:TextBox>
                                        </ContentTemplate>
                                    </asp:UpdatePanel>







<div id="lblQuestion" style="font-weight: bold; height: 21px; width: 659px;" runat="server">
</div>
<asp:RadioButton ID="rbtnA" runat="server" GroupName="an" CssClass="radioButt" />
<asp:RadioButton ID="rbtnB" runat="server" GroupName="an" CssClass="radioButt" />
<asp:RadioButton ID="rbtnC" runat="server" GroupName="an" CssClass="radioButt" />
<asp:RadioButton ID="rbtnD" runat="server" GroupName="an" CssClass="radioButt" />
<asp:Button ID="btnNext" runat="server" Width="100px" Text="Next" OnClick="btnNext_Click" />
<asp:Button ID="btnFnish" runat="server" Width="100px" Text="Finsh" OnClick="btnFnish_Click"

Height="26px" />















using System;
using System.IO;
using System.Collections;
using System.Configuration;
using System.Data;
using System.Linq;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.HtmlControls;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Xml.Linq;
using System.Data.SqlClient;
using DataLayer.DAL;
using Internal.BOL;
using log4net;
using System.Text;

public partial class displayQuestion : System.Web.UI.Page
{
    SessionOnline ObjOnline;
    int  qNo = 0;
    int qtype;
    string correctTestAnswer = "";
    protected void Page_Load(object sender, EventArgs e)
    {
        try
        {
            
            //if (IsPostBack)
            //{
            //    clientSideIsPostBack.Text = "Y";
            //}
            ObjOnline = Common.GetOrCreateSessionObject();
            if (ObjOnline.UserId != 0)
            {
                if (ObjOnline.RoleId ==3)
                {
                    if (!IsPostBack)
                    {
                        Page.ClientScript.RegisterStartupScript(Type.GetType("System.String"), "addScript", "init()", true);
                        clientSideIsPostBack.Text = "Y";
                        lblUserName.Text = ObjOnline.UserName;
                        LoadDetails();
                        BindDetails();
                        //minute = Convert.ToInt32(txtTestDuration.Text) - 1;
                        txtMin.Text = txtTestDuration.Text;
                        btnNext.Visible = true;

                    }
                    else
                    {
                        clientSideIsPostBack.Text = "N";
                    }
                }
                else
                {
                    Response.Redirect("login.aspx");
                }
            }
            else
            {
                Response.Redirect("login.aspx");
            }
        }
        catch
        { }

    }
    public void LoadDetails()
    {
        try
        {
            DataSet ds = new DataSet();
            selectcommand da = new selectcommand();
            ds = da.getTestDetails(2, ObjOnline.UserId);
            lblExamCategory.Text = ds.Tables[0].Rows[0][1].ToString();
            txtTestDuration.Text = ds.Tables[0].Rows[0][8].ToString();           
        }
        catch
        { }
    }

    protected void btnFnish_Click(object sender, EventArgs e)
    {
        fnishExam();
    }
    public void fnishExam()
    {
        try
        {
            if (lblQuestionType.Text == "Objective")
            {
                objectiveAnswer();
            }
            else
            {
                sequenceAnswer();
            }
            NextPage();
        }
        catch
        { }
        Response.Redirect("ThankYou.aspx");
    }
    private int CurrentPage
    {
        get
        {
            object objPage = ViewState["_CurrentPage"];
            int _CurrentPage = 0;
            if (objPage == null)
            {
                _CurrentPage = 0;
            }
            else
            {
                _CurrentPage = (int)objPage;
            }
            return _CurrentPage;
        }
        set { ViewState["_CurrentPage"] = value; }
    }
    public void BindDetails()
    {
       
        try
        {           
            DataSet ds = new DataSet();
            ds.ReadXml(string.Format(HttpContext.Current.Server.MapPath("~/xmlMenu") + "/" + ObjOnline.UserId + "questionAnswer.xml"));
            int Totalcount = Convert.ToInt32(ds.Tables[0].Rows.Count);
            ViewState["TotalPages"] = Totalcount;
            int count = Convert.ToInt32(Totalcount - 1);
            if (count - 1 < CurrentPage)
            {
                btnNext.Visible = false;
            }
            DataTable dt = ds.Tables[0];
            DataView dv = new DataView();
            dv = dt.DefaultView;
            dv.RowFilter = "No =" + CurrentPage;
            DataTable dt1 = dv.ToTable();
            DataSet ds1 = new DataSet();
            ds1.Tables.Add(dt1);
            lblQuestionType.Text = ds1.Tables[0].Rows[0][2].ToString();
            qtype =Convert.ToInt32(ds1.Tables[0].Rows[0][0].ToString());
            if (lblQuestionType.Text == "Objective")
            {
                objectiveType();
            }
            else
            {
                txtUserAnswer.Visible = false;
                lblSketch.Visible = true;
                linkPrint.Visible = true;
                sequenceType();
            }
            //else
            //{
            //    
            //}
            int QNo = 1 + Convert.ToInt32(ds1.Tables[0].Rows[0][9].ToString());
            lblQNo.Text = Convert.ToString(QNo);
            if (qtype == 8)
            {
                imgChoice1.Visible = true;
                imgChoice2.Visible = true;
                imgChoice3.Visible = true;
            }
            else
            {
                imgChoice1.Visible = false;
                imgChoice2.Visible = false;
                imgChoice3.Visible = false;
                
            }
            lblQuestion.InnerHtml = ds1.Tables[0].Rows[0][3].ToString();
            Session["printName"] = ObjOnline.UserName;
            Session["printID"] = ObjOnline.UserId;
            Session["printQuestion"] = lblQuestion.InnerHtml;
            rbtnA.Text = ds1.Tables[0].Rows[0][4].ToString();
            rbtnB.Text = ds1.Tables[0].Rows[0][5].ToString();
            if (ds1.Tables[0].Rows[0][6].ToString() != "")
            {
                rbtnC.Text = ds1.Tables[0].Rows[0][6].ToString();
            }
            else
            {
                trChoiceC.Visible = false;
            }
            if (ds1.Tables[0].Rows[0][7].ToString() != "")
            {
                rbtnD.Text = ds1.Tables[0].Rows[0][7].ToString();
            }
            else
            {
                trChoiceD.Visible = false;
            }
            if (ds1.Tables[0].Rows[0][8].ToString() == "A")
            {
                correctTestAnswer = ds1.Tables[0].Rows[0][4].ToString();
            }
            if (ds1.Tables[0].Rows[0][8].ToString() == "B")
            {
                correctTestAnswer = ds1.Tables[0].Rows[0][5].ToString();
            }
            if (ds1.Tables[0].Rows[0][8].ToString() == "C")
            {
                correctTestAnswer = ds1.Tables[0].Rows[0][6].ToString();
            }
            if (ds1.Tables[0].Rows[0][8].ToString() == "D")
            {
                correctTestAnswer = ds1.Tables[0].Rows[0][7].ToString();
            }
            else
            {
                lblCorrectAnswer.Text = ds1.Tables[0].Rows[0][8].ToString();
            }
            lblCorrectAnswer.Text = correctTestAnswer.ToString();
            lblQuestLeft.Text = Convert.ToString(Totalcount - QNo);
        }
        catch
        {
        }

    }
    private void NextPage()
    {
        try
        {
          
            if (Convert.ToInt32(ViewState["TotalPages"]) == 1)
            {
                this.BindDetails();
                CurrentPage = qNo;
            }
            else
            {
                if (CurrentPage == Convert.ToInt32(ViewState["TotalPages"]) - 1)
                {
                    CurrentPage = 0;
                }
                else
                    CurrentPage += 1;
            }
            this.BindDetails();
            clear();
        }
        catch
        {
        }
    }

    protected void btnNext_Click(object sender, EventArgs e)
    {
        
        try
        {
            this.Page.ClientScript.RegisterClientScriptBlock(this.GetType(), "script", "<script>stopTimer();</script>");
            if (lblQuestionType.Text == "Objective")
            {
                objectiveAnswer();
            }
            else
            {
                sequenceAnswer();
            }
            NextPage();
        }
        catch
        { }
       
    }
    public void sequenceAnswer()
    {
        try
        {
            
            AddDataToTable(txtUserAnswer.Text.ToUpper());
            
        }
        catch
        { }
    }
    public void objectiveAnswer()
    {
        try
        {
            if (rbtnA.Checked == true)
            {
                AddDataToTable(rbtnA.Text);
            }
            else if (rbtnB.Checked == true)
            {
                AddDataToTable(rbtnB.Text);
            }
            else if (rbtnC.Checked == true)
            {
                AddDataToTable(rbtnC.Text);
            }
            else if (rbtnD.Checked == true)
            {
                AddDataToTable(rbtnD.Text);
            }
            else
            {
                AddDataToTable("");
            }
        }
        catch
        { }
    }
    private void AddDataToTable(string Answer)
    {
        try
        {
            DataSet ds = new DataSet();

            if (lblQNo.Text != "1")
            {
                ds.ReadXml(string.Format(HttpContext.Current.Server.MapPath("~/xmlMenu") + "/" + ObjOnline.UserId + "Answer.xml"));
            }
            DataTable myDataTable = new DataTable();

            DataColumn myDataColumn;
            myDataColumn = new DataColumn();
            myDataColumn.DataType = Type.GetType("System.String");
            myDataColumn.ColumnName = "id";
            myDataTable.Columns.Add(myDataColumn);

            myDataColumn = new DataColumn();
            myDataColumn.DataType = Type.GetType("System.String");
            myDataColumn.ColumnName = "QuestionType";
            myDataTable.Columns.Add(myDataColumn);

            myDataColumn = new DataColumn();
            myDataColumn.DataType = Type.GetType("System.String");
            myDataColumn.ColumnName = "Question";
            myDataTable.Columns.Add(myDataColumn);

            myDataColumn = new DataColumn();
            myDataColumn.DataType = Type.GetType("System.String");
            myDataColumn.ColumnName = "UserAnswer";
            myDataTable.Columns.Add(myDataColumn);

            myDataColumn = new DataColumn();
            myDataColumn.DataType = Type.GetType("System.String");
            myDataColumn.ColumnName = "Answer";
            myDataTable.Columns.Add(myDataColumn);

            myDataColumn = new DataColumn();
            myDataColumn.DataType = Type.GetType("System.String");
            myDataColumn.ColumnName = "Mark";
            myDataTable.Columns.Add(myDataColumn);

            ds.Tables.Add(myDataTable);
            DataRow row = ds.Tables[0].NewRow();
            row["ID"] = lblQNo.Text;
            if (lblQuestionType.Text == "Objective")
            {
                row["QuestionType"] = "1";
            }
            else if (lblQuestionType.Text == "Sequence")
            {
                row["QuestionType"] = "2";
            }
            else
            {
                row["QuestionType"] = "3";
            }
            row["Question"] = lblQuestion.InnerHtml;
            row["UserAnswer"] = Answer;
            row["Answer"] = lblCorrectAnswer.Text;

            if (lblCorrectAnswer.Text.ToUpper() == Answer.ToUpper())
            {
                row["Mark"] = "0.5";
            }
            else
            {
                row["Mark"] = "0";
            }
            ds.Tables[0].Rows.InsertAt(row, 0);

            ds.WriteXml(string.Format(HttpContext.Current.Server.MapPath("~/xmlMenu") + "/" + ObjOnline.UserId + "answer.xml"), XmlWriteMode.WriteSchema);
            clear();
        }
        catch
        { }
    }


    public void clear()
    {
        try
        {
            rbtnA.Checked = false;
            rbtnB.Checked = false;
            rbtnC.Checked = false;
            rbtnD.Checked = false;
            txtUserAnswer.Text = "";
        }
        catch
        { }
    }
    public void sequenceType()
    {
        try
        {
            trChoiceA.Visible = false;
            trChoiceB.Visible = false;
            trChoiceC.Visible = false;
            trChoiceD.Visible = false;
            trUserAnswer.Visible = true;
        }
        catch
        { }
    }
    public void objectiveType()
    {
        try
        {
            trChoiceA.Visible = true;
            trChoiceB.Visible = true;
            trChoiceC.Visible = true;
            trChoiceD.Visible = true;
            trUserAnswer.Visible = false;
        }
        catch
        { }
    }

}



我需要的是:我只想在页面加载的第一时间调用该init();函数,而不是在每次回发时调用该函数.

非常紧急.请解决我的问题.
我的邮件ID为[已删除电子邮件]

谢谢.



What I need is: I want to call that init(); function only at the first time of page load, not at every post back.

Its very urgent. Please solve my problem.
My mail id is [Email removed]

Thanks.

推荐答案

您可以从服务器端调用Javascript方法.根据给定的条件(在您的情况下为新页面加载),执行该JS方法.

因此,在下一个按钮单击(看起来是异步回发)或任何提交按钮单击(将是完整回发)时,请勿执行JS方法.

好吧,尝试类似的东西:
You can call your Javascript method from server side. Based on a given condition (Fresh page load in your case), execute that JS method.

Thus, at next button clicks(which looks like to be async postback''s) or any submit button click(which would be full postback) - don''t execute the JS method.

Well, try something like:
Page.ClientScript.RegisterStartupScript(Type.GetType("System.String"), "addScript", "DisplayDateTime()", true);



附言:RegisterClientScriptBlock 方法将脚本块添加到呈现页面的顶部.同时,由RegisterStartupScript 方法添加的脚本块在页面完成加载时但在引发页面的OnLoad事件之前执行.
(这意味着RegisterStartupScript方法将脚本块添加到呈现页面的末尾.)



P.S.: The RegisterClientScriptBlock method adds a script block to the top of the rendered page. While, the script block added by the RegisterStartupScript method executes when the page finishes loading but before the page''s OnLoad event is raised.
(it means the RegisterStartupScript method adds a script block to the end of the rendered page.)


使用cookie保留最后的状态
Use cookies to preserve the last state


这篇关于定时器重设在下一页的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆