2013-08-25 2 views
0

Я кодирую онлайн-экзамен по таймеру и таймер для запуска Я использую JS! Код для таймера для запуска и рассчитать время и представить экзамен, когда таймер истекает следующим образом:таймер онлайн-таймера с использованием Java Script

<script> 
//Once the complete page is loaded the GIF image disappears and questions are displayed 
function StartTimer() 
{ 
    document.getElementById('Loading').style.display = "none"; 
    document.getElementById('Loaded').style.display = "block"; 
    document.getElementById('1').style.display = "block"; 
    document.getElementById('qustn1').style.backgroundColor="#dd6e23"; 
} 
    //Sets the Interval to the time 
var ct = setInterval("calculate_time()",100); // Start clock. 
setTimeOut("submitForm()", <?php echo $time_limit; ?>); 
function submitForm() 
{ 
    document.getElementById("submit").submit(); 
} 
function calculate_time() 
{ 
    var end_time = "<?php echo $_SESSION["start_time"]; ?>"; // Get end time from session variable (total time in seconds). 
    var dt = new Date(); // Create date object. 
    var time_stamp = dt.getTime()/1000; // Get current minutes (converted to seconds). 
    var total_time = end_time - Math.round(time_stamp); // Subtract current seconds from total seconds to get seconds remaining. 
    var mins = Math.floor(total_time/60); // Extract minutes from seconds remaining. 
    var secs = total_time - (mins * 60); // Extract remainder seconds if any. 
    if(secs < 10){secs = "0" + secs;} // Check if seconds are less than 10 and add a 0 in front. 
    document.getElementById("txt").value = mins + ":" + secs; // Display remaining minutes and seconds. 
    // Check for end of time, stop clock and display message. 
    if(mins <= 0) 
    { 
     if(secs <= 0 || mins < 0) 
     { 
      clearInterval(ct); 
      document.getElementById("txt").value = "0:00"; 
      submitForm(); 
     } 
    } 
} 

выше код работает хорошо, и даже тогда, когда истечет таймер, экзамен представляет автоматически. Но я пытаюсь вызвать методы setTimeOut() и setInterval(), когда тело полностью загружено i.e setInterval("calculate_time()",100); // Start clock. setTimeOut("submitForm()", <?php echo $time_limit; ?>); должно быть в startTimer().

<body onload="StartTimer()"> 
    ...... 
    <script> 
    ..... 
    function StartTimer() 
{ 
    document.getElementById('Loading').style.display = "none"; 
    document.getElementById('Loaded').style.display = "block"; 
    document.getElementById('1').style.display = "block"; 
    document.getElementById('qustn1').style.backgroundColor="#dd6e23"; 
    var ct = setInterval("calculate_time()",100); // Start clock. 
setTimeOut("submitForm()", <?php echo $time_limit; ?>); 
} 
..... 
    </script> 

Но когда я это делаю, я не могу точно выполнить код. Хотя таймер достигает 0:00, экзамен не может быть отправлен, вместо этого работает отрицательный таймер! Пожалуйста, помогите мне!!

ответ

1

Неверный параметр для переменной ct во втором коде. Фактически, вы должны поместить эту переменную в контекст, доступный для функции * calculate_time *.

Например, вы можете попробовать этот код, который перемещает переменные карат к амбулаторной большей сфере:

<body onload="StartTimer()"> 
...... 
    <script> 
    ..... 
    var ct = null; 
    function StartTimer() { 
     document.getElementById('Loading').style.display = "none"; 
     document.getElementById('Loaded').style.display = "block"; 
     document.getElementById('1').style.display = "block"; 
     document.getElementById('qustn1').style.backgroundColor="#dd6e23"; 
     ct = setInterval("calculate_time()",100); // Start clock. 
     setTimeOut("submitForm()", <?php echo $time_limit; ?>); 
    } 

    function submitForm() { 
     document.getElementById("submit").submit(); 
    } 
    function calculate_time() { 
     var end_time = "<?php echo $_SESSION["start_time"]; ?>"; // Get end time from session variable (total time in seconds). 
     var dt = new Date(); // Create date object. 
     var time_stamp = dt.getTime()/1000; // Get current minutes (converted to seconds). 
     var total_time = end_time - Math.round(time_stamp); // Subtract current seconds from total seconds to get seconds remaining. 
     var mins = Math.floor(total_time/60); // Extract minutes from seconds remaining. 
     var secs = total_time - (mins * 60); // Extract remainder seconds if any. 
     if(secs < 10){secs = "0" + secs;} // Check if seconds are less than 10 and add a 0 in front. 
     document.getElementById("txt").value = mins + ":" + secs; // Display remaining minutes and seconds. 
     // Check for end of time, stop clock and display message. 
     if(mins <= 0) { 
      if(secs <= 0 || mins < 0) { 
       clearInterval(ct); 
       document.getElementById("txt").value = "0:00"; 
       submitForm(); 
      } 
     } 
    } 

    ..... 
    </script> 
...... 
</body> 

Лучшему способом найти корень проблемы, как это, используют отладчик JavaScript например FireBug, который легко определит корень вашей проблемы.

+0

Благодаря @Mohammad Дашти – user2644795

0

Я работал в приложении онлайн-викторины, где мне нужно реализовать таймер. Я создал одну функцию Javascript, что я называю по нагрузке тела

`< script language ="javascript" > 
      var tim;  
      var min = '${sessionScope.min}'; 
      var sec = '${sessionScope.sec}'; 

     function customSubmit(someValue){ 
     document.questionForm.minute.value = min; 
     document.questionForm.second.value = sec; 
     document.questionForm.submit(); 
     } 

    function examTimer() { 
     if (parseInt(sec) >0) { 

      document.getElementById("showtime").innerHTML = "Time Remaining :"+min+" Minutes ," + sec+" Seconds"; 
      sec = parseInt(sec) - 1;     
      tim = setTimeout("examTimer()", 1000); 
     } 
     else { 

      if (parseInt(min)==0 && parseInt(sec)==0){ 
       document.getElementById("showtime").innerHTML = "Time Remaining :"+min+" Minutes ," + sec+" Seconds"; 
       alert("Time Up"); 
       document.questionForm.minute.value=0; 
       document.questionForm.second.value=0; 
       document.questionForm.submit(); 

      } 

      if (parseInt(sec) == 0) {    
       document.getElementById("showtime").innerHTML = "Time Remaining :"+min+" Minutes ," + sec+" Seconds";     
       min = parseInt(min) - 1; 
       sec=59; 
       tim = setTimeout("examTimer()", 1000); 
      } 

     } 
    } 
< /script> 

` Значение переменной мин и сек устанавливаются sessionVariable, которые держат время экзамена на сессии.

Полное приложение с функцией таймера доступна здесь

http://www.edureka.co/blog/creating-an-online-quiz-application-implementing-countdown-timer/

Смежные вопросы