Я написал следующий код. С помощью этого кода нажатие кнопки «Отправить» представляет форму вручную. У меня есть также таймер, который я хочу автоматически отправить форму через 10 секунд. Но это не работает. Он подсчитывается до 0, а затем ничего не делает. Не могли бы вы рассказать мне, что мне не хватает или как изменить мой таймер (если есть, это проблема)? Но я хочу, чтобы пользователь смотрел таймер в качестве примера
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" /> <script type="text/javascript"> function countDown(secs,elem) { var element = document.getElementById(elem); element.innerHTML = "<h2>You have <b>"+secs+"</b> seconds to answer the questions</h2>"; if(secs < 1){ clearTimeout(timer); document.getElementById('myquiz').submit(); } secs--; var timer = setTimeout ('countDown('+secs+',"'+elem+'")',1500); } </script> <div id="status"></div> <script type="text/javascript">countDown(5,"status");</script> <title>Questionnaire</title> <style type="text/css"> span {color: #FF00CC} </style> </head> <body> <h1>Please complete the following Survey</h1> <form name="quiz" id ="myquiz" method="post" action="includes/process.php"> First Name: <input type="text" name="firstname" id="fname"/> <p></p> Last Name: <input type="text" name="lastname" id="lname"/> <p></p> <input type="submit" name="submit" value="Go"></input> <input type="reset" value="clear all"></input> </form> </body> </html>
Не делайте этого:
var timer = setTimeout ('countDown('+secs+',"'+elem+'")',1500);
в countDown
. Каждые 1500 вы снова вызываете countDown
.
Поместите это в нижней части страницы (перед закрытием тега body
)
<script type="text/javascript"> secs = 10; timer = setInterval(function () { var element = document.getElementById("status"); element.innerHTML = "<h2>You have <b>"+secs+"</b> seconds to answer the questions</h2>"; if(secs < 1){ clearInterval(timer); document.getElementById('myquiz').submit(); } secs--; }, 1000)
Btw: где объявляется validate()
?
Не проверял, но должен делать трюк.
Существует три ошибки, вызывающих эту ошибку.
id
. Он должен быть id="myquiz"
. Кстати, таймаут имеет неправильное время, он должен быть 1000.
Рабочий пример: plunk
Вы должны представить форму, а не элемент, поэтому попробуйте следующее:
document.forms["quiz"].submit();
ИЛИ если это единственная форма, которую вы можете использовать
document.forms[0].submit();
Этот Кодекс будет работать:
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" /> <script type="text/javascript"> function countDown(secs, elem) { var element = document.getElementById(elem); element.innerHTML = "<h2>You have <b>"+secs+"</b> seconds to answer the questions</h2>"; if(secs < 1) { document.quiz.submit(); } else { secs--; setTimeout('countDown('+secs+',"'+elem+'")',1500); } } function validate() { return true; } </script> <div id="status"></div> <script type="text/javascript">countDown(5,"status");</script> <title>Questionnaire</title> <style type="text/css"> span { color: #FF00CC; } </style> </head> <body> <h1>Please complete the following Survey</h1> <form name="quiz" id="myquiz" onsubmit="return validate()" method="post" action="includes/process.php"> First Name: <input type="text" name="firstname" id="fname"/> <p></p> Last Name: <input type="text" name="lastname" id="lname"/> <p></p> <input type="submit" name="submitbutton" value="Go"></input> <input type="reset" value="clear all"></input> </form> </body> </html>
определить функцию wait as
function caller() { setInterval(submit_now, 10000); } function submit_now() { document.forms["quiz"].submit(); }
Explaination:
1). Функция wait()
будет устанавливать интервал времени в 10 секунд (10000) мс до того, как он submit_now()
функцию submit_now()
.
2). С другой стороны submit_now()
отправляет ваши данные формы, когда выполняется вызов этой функции.