Javascript java脚本中的秒表

Javascript java脚本中的秒表,javascript,asp.net,Javascript,Asp.net,我想通过向母版页添加4个aspx页面,一次为4个科目设计一个在线考试网站。为此,我需要一个秒表 据我所知,我用JavaScript设计了一个秒表,并将其附加到母版页 var tim; var min = 120; var sec = 60; var f = new Date(); function f1() { f2(); document.getElementById("startday").innerHTML = f.getDate() + "/" + (f.getMont

我想通过向母版页添加4个aspx页面,一次为4个科目设计一个在线考试网站。为此,我需要一个秒表

据我所知,我用JavaScript设计了一个秒表,并将其附加到母版页

var tim;
var min = 120;
var sec = 60;
var f = new Date();

function f1() {
    f2();
    document.getElementById("startday").innerHTML = f.getDate() + "/" + (f.getMonth() + 1) + "/" + f.getFullYear();
    document.getElementById("starttime").innerHTML = "Exam Starts at " + f.getHours() + ":" + f.getMinutes();
    //document.getElementById("endtime").innerHTML = "Your  time is :" + f.toLocaleTimeString();
}

function f2() {
    if (parseInt(sec) > 0) {
        sec = parseInt(sec) - 1;
        document.getElementById("showtime").innerHTML = min + ":" + sec;
        tim = setTimeout("f2()", 1000);
    } else {
        if (parseInt(sec) == 0) {
            min = parseInt(min) - 1;
            if (parseInt(min) == 0) {
                clearTimeout(tim);
                location.href = "default5.aspx";
            } else {
                sec = 60;
                document.getElementById("showtime").innerHTML = min + ":" + sec;
                tim = setTimeout("f2()", 1000);
            }
        }
    }
}
但我的问题是,如果我改变我的主题,母版页也得到刷新,秒表时间从120分钟开始重新开始


所以请帮帮我。即使我更改了主题,时间也应该保持原样而不刷新。

如果在ASP中执行此操作,则应将计时器保留在服务器端,并将其引入新加载的页面(以便在运行时保持状态)。否则,您可以设置cookies,并在从一页到另一页的过程中从您停止的地方开始

或者,您可以动态加载新页面,这样您就永远不会离开主页面(计时器驻留在其中),或者使用iframe,或者,如果所有页面都是某个域的本地页面,那么您可以通过ajax加载它们


但我确实认为第一种选择是最好的,如果你能控制ASP

我假设您使用的是ASP.Net Web表单。您可以使用会话来保持时钟的状态。在母版页中,可以有类似的内容

<script>
    var min = <%= Session["min"] %>;
    var sec = <%= Session["sec"] %>;
</script>

var min=;
var-sec=;

每次用户切换到另一个页面时,请尝试更新会话状态。

如果您要问这个问题,您需要更加熟悉此处涉及的客户端和服务器技术。ASP生成HTML页面(以及其他内容)。当它们被生成时,它们的行为就像任何其他HTML页面一样,包括iFrame和HTML必须提供的任何其他内容)@namkha87的答案就是我所描述的理想解决方案。只有在绝对必要的情况下才使用iFrame。小提示:以后做
parseInt(sec)
会让你头疼。相反,要这样做:
+sec
parseFloat(sec)
parseInt(sec,10)