Im создает образец веб-страницы викторины с использованием codeigniter. И в моем одном из представлений есть сценарий, где есть таймер, и когда он достигает нуля, форма должна быть представлена. Я пробовал код, и таймер работает, но когда он достигает нуля, вызов для отправки не выполняется, поэтому им не удается перейти к следующей странице. Но когда кнопка отправки нажата, все работает нормально. Ниже мой код. Может ли кто-нибудь помочь мне найти, где я ошибаюсь.
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="utf-8">
<title>Test Your Knowledge</title>
<script type="text/javascript">
var totalsec = 50;
var c_min = parseInt(totalsec / 60);
var c_sec = parseInt(totalsec % 60);
function CheckTime() {
document.getElementById("timer").innerHTML = "Time left: " + c_min + " min " + c_sec + " sec ";
if (totalsec <= 0) {
document.getElementById("difficultyForm").submit();
} else {
totalsec = totalsec - 1;
c_min = parseInt(totalsec / 60);
c_sec = parseInt(totalsec % 60);
setTimeout("CheckTime()", 1000);
}
}
setTimeout("CheckTime()", 1000);
</script>
<style type="text/css">
</style>
</head>
<body>
<div id="container">
<h1>Welcome to Test Your Knowledge!!!</h1>
<div id="body">
<h2>Selected the difficulty level: Easy</h2>
<div><span id="timer"></span></div>
<form action="/AWT_CW1/index.php/ResultController/" method="POST" id="difficultyForm" name="difficultyForm">
<?php
foreach ($quesAnsList as $quesAns) {
echo '<question>';
echo '<strong>' . $quesAns->question . '</strong>';
echo '<br>';
echo '<input type="radio" name="' . $quesAns->answer_id . '" value="' . $quesAns->answer1 . '">' . $quesAns->answer1 . ' <br>';
echo '<input type="radio" name="' . $quesAns->answer_id . '" value="' . $quesAns->answer2 . '">' . $quesAns->answer2 . ' <br>';
echo '<input type="radio" name="' . $quesAns->answer_id . '" value="' . $quesAns->answer3 . '">' . $quesAns->answer3 . ' <br>';
echo '</question>';
}
?>
<input type="submit" name="submit" value="Submit">
</form>
</div>
</div>
</body>
</html>
Примечание. Меня попросили не использовать jquery или ajax для этого проекта. Заранее спасибо.
Это потому, что вы назвали кнопку отправки "submit", переопределяя функцию submit().
Вы можете исправить это, заменив
<input type="submit" name="submit" value="Submit">
С
<input type="submit" name="submit_button" value="Submit">
Как отметил @Rajesh в комментариях, setTimeout ожидает функцию как первый аргумент, в то время как вы предоставляете строку. Заменить setTimeout("CheckTime()", 1000);
с
setTimeout(function(){
CheckTime();
}, 1000);
Вызывает функцию или выполняет фрагмент кода после указанной задержки.
Синтаксис: setTimeout(function(), delay);
Неоднократно вызывает функцию или выполняет фрагмент кода с фиксированной временной задержкой между каждым вызовом. Возвращает интервалID.
Синтаксис: setInterval(function(),interval)
Для целей моделирования я уменьшил таймер до 10 секунд.
(function () {
var totalsec = 10;
var interval = null;
function CheckTime() {
document.getElementById("timer").innerHTML = "Time left: " + parseInt(totalsec / 60) + " min " + (totalsec % 60) + " sec ";
if (totalsec <= 0) {
window.clearInterval(interval)
document.getElementById("difficultyForm").submit();
} else {
totalsec--;
}
}
function initInterval() {
interval = setInterval(function () {
CheckTime()
}, 1000);
}
initInterval();
})()
<span id="timer"></span>
<form id="difficultyForm">
</form>
setInterval