2011-05-15 2 views
0

im пытается создать онлайн-экзамен, используя django. Я использовал таймер обратного отсчета, чтобы узнать, когда это будет сделано.Как создать компонент javascript таймера в шаблоне django

, но проблема в том, что каждый раз, когда я перехожу к следующей странице вопроса, таймер перезапускается.

Есть ли способ сделать это, даже после обновления страницы?

вот мой код шаблона (который имеет таймер)

<form name="counter"><input type="text" size="8" 
name="d2"></form> 

<script> 
<!-- 
// 
var milisec=0; 
var seconds={{time}}; 
document.counter.d2.value={{time}}; 



function display() 
{ 
if (milisec<=0){ 
    milisec=9 
    seconds-=1 
} 
if (seconds<=-1){ 
    milisec=0 
    seconds+=1 
} 
else 
    milisec-=1 
    document.counter.d2.value=seconds+"."+milisec 
    setTimeout("display()",1000) 
} 
display() 
--> 
</script> 

заранее спасибо

+0

Вы можете использовать Javascript для установки cookie, но если это для онлайн-экзамена, это не будет wo rk хорошо вообще. Когда человек переходит на следующую страницу, пользователь нажимает кнопку и отправляет форму? Вы можете отправить значение через параметры POST и забрать его на следующей странице. – tlunter

ответ

1

Самый простой способ реализовать - просто передать текущее значение таймера в параметрах POST и перезапустить таймер, используя это значение таймера на следующей странице.

Возможно, лучше использовать ajax (возможно, через библиотеку django, например dajax), как хороший способ, и иметь таймер на одной странице (который постоянно обновляет вопросы по мере их перемещения).

Кроме того, если этот онлайн-тест используется любым способом (например, в качестве класса викторины для класса), вы должны записать начальную и конечную временную метку на сервере и пройти только эту разницу (возможно, дать несколько дополнительных секунд для учета отставания в связи). В общем, вы не можете верить, что работа javascript не была изменена. Он все еще может быть удобным для того, чтобы сообщить им, сколько осталось времени, но помните, что все клиентские java-скрипты на стороне клиента легко модифицируются пользователем, чтобы дать им больше времени.

1

Самый простой способ, на мой взгляд, является просто использовать AJAX и заменить форму на текущей странице. Таким образом, вам не нужно обновляться, и таймер будет продолжать работать. Он также загрузит следующую форму быстрее!

4

Это то, что я сделал.

Знаете, когда они приступили к тестированию, и вы знаете, как долго они должны его принимать, поэтому, когда начинается тест, вычислите ожидаемое время окончания и сохраните его где-нибудь (база данных и т. Д.). Передайте конечное время в качестве переменной в шаблон и используйте это в своем javascript для оцифровки оставшегося времени. Поскольку время окончания всегда будет одинаковым со страницы на страницу, вам не нужно беспокоиться о передаче значений между формами.

Если вы передадите значения между формами или установите файлы cookie, то вы сделаете это очень просто, чтобы кто-то мог взломать тест, чтобы дать себе больше времени. Хранение этого значения за кулисами и не изменение его на страницах будет немного сложнее взломать. Они все еще могут взломать таймер javascript, но это нормально, потому что после того, как каждый вопрос будет отправлен, вы просто проверите, будет ли текущее время больше времени окончания, и если это так, вы знаете, что время истекло, и вы можете закончить тест.

Если вы используете плагин jquery, такой как http://keith-wood.name/countdown.html, он также сделает вашу жизнь проще.

Надеюсь, что это поможет.

1

Используйте сеанс для хранения даты \ времени.

Вы сначала создать переменную, если она не существует, например:

import datetime 
#Store the current time in session 
if 'time_started' not in request.session: 
    request.session['time_started'] = datetime.datetime.today() 

Чтобы прочитать значение, которое вы просто использовать

time_started = request.session['time_started'] 

Если вам нужно удалить time_started переменную, которую можно использовать это:

del request.session['time_started'] #delete time_started variable in session 
Смежные вопросы