场景是我正在生成测试。倒计时钟。倒计时结束后,表格将被提交。
所以目前如果我正常完成测试等,并自己提交我的结果,一切正常。
这是我在倒计时结束时触发表单提交的声明:
if(Todays_Date >= Target_Date){
alert("Timeup, Submitting exam....");
clearTimeout(timeoutID);
$("form#testForm").submit();
}
我目前得到的是if语句成功触发并弹出警报,但似乎没有其他事情发生,即它没有导航到操作页面。
表格详情:
<form id="testForm" method="post" action="add_responses.php">
现在我是一个菜鸟,所以使用submit()实际上并不遵循操作页面吗?我是否必须告诉软件发送到页面或什么? (窗口位置等)
非常感谢,编辑:添加了更多代码:
// TEST COUNTDOWN CLOCK
function countdown(timestamp) {
timetarget = new Date(timestamp);
var Today = new Date();
var Todays_Date = Today.getTime();
var Target_Date = timetarget.getTime();
var tester = new Date(Target_Date);
//Find their difference, and convert that into seconds.
var Time_Left = Math.round((Target_Date - Todays_Date) / 1000);
if(Todays_Date >= Target_Date){
clearTimeout(timeoutID);
$("form#testForm").submit();
alert("Timeup, Submitting exam....");
}
//More datailed.
days = Math.floor(Time_Left / (60 * 60 * 24));
Time_Left %= (60 * 60 * 24);
hours = Math.floor(Time_Left / (60 * 60));
Time_Left %= (60 * 60);
minutes = Math.floor(Time_Left / 60);
Time_Left %= 60;
seconds = Time_Left;
if(hours == 0 && minutes < 10){
document.getElementById('countdown').style.color='red';
}
if (seconds < 10) {
seconds = '0' + seconds;
}
if (minutes < 10) {
minutes = '0' + minutes;
}
html = hours + ':' + minutes + ':' + seconds + ' secs';
document.getElementById('countdown').innerHTML = html;
//Recursive call, keeps the clock ticking.
var timeoutID = setTimeout(function() { countdown(timestamp); }, 1000);
}
答案 0 :(得分:2)
<强>更新强>
我怀疑这是因为您放置了if语句的位置以及代码的一般顺序。
提交表单后,它会继续向下搜索代码并返回到setTimeout。
最简单的方法是在if;
中添加一个return语句if(Todays_Date >= Target_Date){
clearTimeout(timeoutID);
$("form#testForm").submit();
alert("Timeup, Submitting exam....");
return; // <-- add this so the code below isn't excuted again.
}
正如一些附注所述,并且正如我的评论中所解释的那样,这种逻辑属于服务器端,因为依赖Javascript会对您的系统造成严重影响和缺陷:
javascript:document.getElementById('testForm').setAttribute('id', 'i_want_as_much_time_as_i_like_to_complete_this_exam_mwuhahaha');
对于像这样的系统来说,这一点是不可接受的(除非这是一个愚蠢的调查问卷或一些无足轻重的问题,但对于真正的考试,例如单一工作或其他事情 - 需要认真重新思考)
设计这样一个系统很有意思,因为你做了一些本能的侵入;要求用户在分配的时间内提交表格。但是,让我们进入视角;当你在真正的考试中没有分配你所拥有的时间时,就会设置简单。当你交作业;你有截止日期。当不满足时,运气不好。底线是用户必须负责及时提交他们的工作。
答案 1 :(得分:0)
我会首先尝试清除超时,然后提交表单,然后显示警告:
if(Todays_Date >= Target_Date){
clearTimeout(timeoutID);
$("form#testForm").submit();
alert("Timeup, Submitting exam....");
}
我认为您执行操作的顺序对您不利。