我正在开发一个个人项目,教师帐户可以为学生帐户设计自己的多项选择考试。
考试班级属性之一是exam_time
,这是一个整数属性,它设置了学生在进行考试时提供的分钟数。
当学生开始进行考试时,“学生”类有两个重要字段,一个是running_exam
,用于设置该学生当前正在执行的考试ID,另一个是exam_time
,该整数存储该学生还剩下几秒钟。
def start_exam(request, exam_id):
exam = Exam.objects.get(id=exam_id, students=Student.objects.get(email=request.user.email))
if exam:
Student.objects.filter(email=request.user.email).update(
doing_exam=exam.id,
exam_time=exam.time*60,
)
return etc...
现在,我需要一种方法来每秒触发一个事件以更新学生的exam_time
字段,每秒减去-1并检查它是否不为0。
另一种方法是使用JavaScript进行此操作,但由于它是纯前端,因此可能非常脆弱。
有建议吗?
答案 0 :(得分:1)
您可以使用jQuery完成此操作。像这样:
<script>
var duration = {{ exam_time }} * 100
var qTimer = duration, seconds, dispms;
function startTimer(duration, display) {
questionTimer = setInterval(function () {
seconds = parseInt(qTimer / 100, 10);
dispms = parseInt(qTimer % 100, 10);
seconds = seconds < 10 ? "0" + seconds : seconds;
dispms = dispms < 10 ? "0" + dispms : dispms;
display.textContent = seconds+":"+dispms;
if (--qTimer < 0) {
clearInterval(questionTimer);
display.textContent = "";
qTimer = -1;
window.location = {% url 'next-screen' %}
}
}, 10);
}
var display = document.querySelector('#time'); /* time is an id for a span/div where the time remaining is displayed */
startTimer(duration, display);
</script>