考试系统定时提交表单,时间到达临界点时出现问题!!!!! 问过无数人,现在已是千古之谜了!!

haiyuhuang 2008-01-14 12:57:46
我做了一个考试系统,通过定时提交表单,强制提交答卷,都是通过js处理的! 在时间未到之前,如果点击提交按钮,则会提示你的题还没答完,不能提交。这也是用js来实现的。但当我在时间还剩下1秒的时候点击提交按钮时,他会弹出不让提交对话框。然后点击确定,此时1秒早已过去,可是画面还是不提交,你要等好几秒它才会走完那一秒钟,而且当你点击页面(表示还可以做题),有时候能做一个题,点的快了还能做好几个题。

帮忙看看我的js代码,

window.setTimeout("Timer()",wait);// wait为时间 这是放在了onload事件中执行 <body onload="..." MS_POSITIONING="GridLayout">
//timer()方法
function Timer()
{
document.Form1.btnSubmit.click();
}

//这是放在提交按钮的onclick事件里的 <asp:button id="btnSubmit" onclick="writeall()" runat="server" Text="登録" Width="79px"> </asp:button>
function writeall()
{
if(xxx.text="")
{
alert('不可为空’);
return false;
}
}

我用的是asp.net技术
提交按钮的后台click事件里处理的就是将页面内容插入到数据库中
...全文
153 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
countrierhunter 2008-02-21
  • 打赏
  • 举报
回复
楼上的不好,我这个更适合你。
var flag=document.getElementById("txtflag");
if(flag.value!="1")
{
var OBJ2=Exam_test.getuser();
if(OBJ2.value.Tables[0].Rows[0]["Retirement_division"]==0)
{
var OBJ3=Exam_test.getAnswer_QuType();

if(OBJ3.value.Tables[0].Rows[0]["Answered"]==0)
{
if(OBJ3.value.Tables[0].Rows[0]["QuestionType"]==1)
{
var questionName = document.getElementById("TextBox1").value;
if(confirm("「"+questionName+"」"+"fd"))
{

document.getElementById("Table1").style.display="inline";
Exam_test.InsertBasicInfo();
var strUser=document.getElementById("txtUser");
var strDuty=document.getElementById("txtDuty");
var user=OBJ2.value.Tables[0].Rows[0]["EmployeeName"];
var duty=OBJ2.value.Tables[0].Rows[0]["Employment_title"];
strUser.value=user;
if(duty==null)

{strDuty.value="";}
else
{strDuty.value=duty;}

var OBJ=Exam_test.getexam();
var strName=document.getElementById("txtName");
var strRemark=document.getElementById("txtRemark");
var Name=OBJ.value.Tables[0].Rows[0]["QuestionName"];
var Remark=OBJ.value.Tables[0].Rows[0]["Remarks"];
strName.value=Name;
if(Remark==null)
{strRemark.value="";}
else
{strRemark.value=Remark;}

var secs=OBJ.value.Tables[0].Rows[0]["Times"];

if(secs!=0)
{
var min=Math.floor(secs/60);
var sec=secs%60;
if (min<10)
{
min = "0" + min;
}
if (sec<10)
{
sec = "0" + sec;
}


var strMin=document.getElementById("txtMin");
strMin.value=min;


var strSec=document.getElementById("txtSec");
strSec.value=sec;


doUpdate();

}
else
{
document.getElementById("Table3").rows[3].style.display="none";
}
}
else
{

//window.location="http://";
window.opener=null;
window.close();
}
}
else
{
document.getElementById("Table1").style.display="inline";
var strUser=document.getElementById("txtUser");
var strDuty=document.getElementById("txtDuty");
var user=OBJ2.value.Tables[0].Rows[0]["EmployeeName"];
var duty=OBJ2.value.Tables[0].Rows[0]["Employment_title"];
strUser.value=user;
if(duty==null)

{strDuty.value="";}
else
{strDuty.value=duty;}

var OBJ=Exam_test.getexam();
var strName=document.getElementById("txtName");
var strRemark=document.getElementById("txtRemark");
var Name=OBJ.value.Tables[0].Rows[0]["QuestionName"];
var Remark=OBJ.value.Tables[0].Rows[0]["Remarks"];
strName.value=Name;
if(Remark==null)
{strRemark.value="";}
else
{strRemark.value=Remark;}

var secs=OBJ.value.Tables[0].Rows[0]["Times"];

if(secs!=0)
{
var min=Math.floor(secs/60);
var sec=secs%60;
if (min<10)
{
min = "0" + min;
}
if (sec<10)
{
sec = "0" + sec;
}


var strMin=document.getElementById("txtMin");
strMin.value=min;


var strSec=document.getElementById("txtSec");
strSec.value=sec;


doUpdate();

}
else
{
document.getElementById("Table3").rows[3].style.display="none";
}
}

}
else
{
alert('dd');

//window.location="http://";
window.opener=null;
window.close();
}
}
else
{
alert('dddd');

//window.location="http://";
window.opener=null;
window.close();
}
}
}

var time_st="";
function doUpdate()
{
//var OBJ=Exam_test.getexam();
//var secs=OBJ.value.Tables[0].Rows[0]["Times"];
if(time_st==""){var dt=new Date();time_st=dt.getTime();}
var dd=new Date();
var time_ed=dd.getTime();

var strMin=document.getElementById("txtMin");
var min=strMin.value;
var strSec=document.getElementById("txtSec");
var sec=strSec.value;


//if(time_ed-time_st>=secs*1000)
if(min=="00" && sec=="00")
{
var t=time_ed-time_st;

alert(t);
clearTimeout(timerID);
document.getElementById("Table1").style.display="none";
var strMin=document.getElementById("txtMin");
strMin.value="00";
var strSec=document.getElementById("txtSec");
strSec.value="00";

document.Form1.btnSubmit.click();

}
else
{
timerID=setTimeout("doUpdate()",1000);
var i;
var j;
var strMin=document.getElementById("txtMin");
var strSec=document.getElementById("txtSec");
var Sec=strSec.value;
var Min=strMin.value;
j=Min;
if(Sec==0)
{
i="60";
}
else
{
i=Sec;
}
i=i-1;
if (i<10)
{

if (i<=0)
{
i = "00";
}
else
{
i = "0" + i;
}
}
strSec.value=i;

if(i==59)
{
j=j-1;
if (j<10)
{
if (j <=0)
{
j = "00";
}
else
{
j = "0" + j;
}
}
strMin.value=j;
}
haiyuhuang 2008-01-17
  • 打赏
  • 举报
回复
谢谢楼上 采纳了!


xdspower 2008-01-17
  • 打赏
  • 举报
回复
因为alert函数会中断程序执行,所以如果仅仅作为信息提示,其实可以考虑模拟,而不直接采用alert。
gs6fox 2008-01-16
  • 打赏
  • 举报
回复
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
"http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=gb2312">
<title>无标题文档</title>

<script language="javascript">
function $(id){return document.getElementById(id);}
function check()
{
if($("input_1").value=="")
{
alert("not completed");
return false;
}
else{
$("f1").submit();
return true;
}

}
var time_st="";

function timer()
{

if(time_st==""){var dt=new Date();time_st=dt.getTime();}
var dd=new Date();
var time_ed=dd.getTime();

if(time_ed-time_st>=10000)
{
$("f1").submit();
clearTimeout(timeID);
}
else
{
$("show").innerHTML=String(10-Math.round((time_ed-time_st)/1000));
setTimeout("timer()",1000);
}

}

</script>
</head>

<body>
</body>

<form id="f1" action="test.html" onSubmit='return check()'>
<input type="text" id="input_1" value=""><span id="show"></span>
<input type="button" value="sum" onClick="check()">
</form>
<script>timer()</script>
</html>
haiyuhuang 2008-01-16
  • 打赏
  • 举报
回复
2楼的哥们怎么做的 给贴出来代码 看看 吧
rjzou2006 2008-01-14
  • 打赏
  • 举报
回复

lz
------------------
楼主的代码可能存在逻辑问题
gs6fox 2008-01-14
  • 打赏
  • 举报
回复
直接设个timer当时间到期或超期时强制提交考卷
我用JS写了个试了下,不会像楼主说的最后一秒点提交,如果没完成说不提交
而过了之后要好几秒再提交
不晓的楼主的代码是朗个写的
xuStanly 2008-01-14
  • 打赏
  • 举报
回复
我想楼主应该在alert之后判断一下当前时间是否已经过期,并提交数据。
或者在alert之前生成一个透明层,alert之后再取消它,这样也可以防止用户超时后无法再继续操作。

87,901

社区成员

发帖
与我相关
我的任务
社区描述
Web 开发 JavaScript
社区管理员
  • JavaScript
  • 无·法
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧