通过Javascript错误设置考试时间30分钟?

通过Javascript错误设置考试时间30分钟?,javascript,php,Javascript,Php,我正在为web考试页面写作,在那里我必须设置30分钟的考试时间。因此我使用onload和settimeout函数检查30分钟是否结束,问题页面是否关闭并转到完成页面。我想添加当前的30分钟。但这不起作用,不要转到finish.php <body onload="time()"> <!-- question code --> <div id="time"></div><!-- show time --> </body>

我正在为web考试页面写作,在那里我必须设置30分钟的考试时间。因此我使用
onload
settimeout
函数检查30分钟是否结束,问题页面是否关闭并转到完成页面。我想添加当前的30分钟。但这不起作用,不要转到
finish.php

<body onload="time()">
  <!-- question code -->
<div id="time"></div><!-- show time  -->
</body>

JS

<script>
function time(){
var j = new Date();
var hr = j.getHours();
var sec = j.getSeconds();
var min = j.getMinutes();
var m = min + 30;//set 30 minutes exam times
if (m === min) {
    location.href = "finish.php";
}    
document.getElementById('time').innerHTML = hr + ":" + min + ":" + sec;
 setTimeout(function() {
    time()
 }, 1000);
}
</script>

功能时间(){
var j=新日期();
var hr=j.getHours();
var sec=j.getSeconds();
var min=j.getMinutes();
var m=min+30;//设置30分钟的检查时间
如果(m==min){
location.href=“finish.php”;
}    
document.getElementById('time').innerHTML=hr+“:“+min+”:“+sec;
setTimeout(函数(){
时间()
}, 1000);
}

您正在为
m
每超时一次分配新值。您应该只初始化一次,
m

而且
minute
0-59
开始,所以你不能总是检查它是否等于
m+30
,这是错误的做法

据说在服务器端执行此超时总是更好的,但在客户端,有足够的方法可以绕过此超时

function time(){
    setTimeout(function() {
        location.href = "finish.php";
    }, 30*60*1000);
    setInterval(function() {
       var j = new Date();
       var hr = j.getHours();
       var min = j.getMinutes();
       var sec = j.getSeconds();
       document.getElementById('time').innerHTML = hr + ":" + min + ":" + sec;
    }, 1000);
 }
函数时间(){
var time=60*1;//将1替换为30分钟
分钟,秒;
setInterval(函数(){
分钟=parseInt(时间/60)
秒=parseInt(时间%60);
分钟=分钟<10?“0”+分钟:分钟;
秒=秒<10?“0”+秒:秒;
document.getElementById('time').innerHTML=minutes+“:”+seconds;
时间--;
如果(时间<0){
location.href=“finish.php”;
}
}, 1000);
}


请包含一段JSFIDLE代码为什么不直接设置超时(function(){location.href=“finish.php”},30*60*1000);嗯,UI每一秒钟都在更新。getElementById('time')。innerHTML=hr+“:“+min+”:“+sec时间显示(setInterval)不起作用,setTimeout起作用。谢谢您的回答