#javascript #forms #delay #arduino
#javascript #формы #задержка #arduino
Вопрос:
У меня есть веб-сайт, который использует кнопки отправки для отправки команд на удаленный микропроцессор. Если пользователь нажимает кнопку отправки слишком много раз за короткий промежуток времени, удаленный микропроцессор и программное обеспечение выйдут из строя. Я подумал, что мог бы добавить односекундную задержку между каждым нажатием кнопки «отправить», чтобы она не зависала. Вот что у меня есть для кнопки отправки.
<form name="test" action="http://mydomain.dyndns.org/?8" target="results" method="POST">
<input type="submit" value=" ← Move Left " />
</form>
Я думал, что мог бы использовать что-то подобное onSubmit="setTimeout (1000)"
в форме, но, похоже, это не работает. Что я делаю не так?
Пример:
<form name="test" action="http://mydomain.dyndns.org/?8" target="results" method="POST" onSubmit="setTimeout (1000)">
<input type="submit" value=" ← Move Left " />
</form>
Комментарии:
1. Я думаю, что лучшее место для этого было бы в серверной части. Если вы используете только JavaScript, его можно легко отключить, что все равно оставит вас открытыми для DoS-атак.
2. Плохой заголовок. Вы не откладываете события отправки, вы предотвращаете их.
Ответ №1:
На самом деле вам придется написать код для постановки запросов в очередь и отправки их в микропроцессор с любой скоростью, которую микропроцессор может безопасно принять. Вам нужно сделать это на стороне сервера, а не на стороне клиента.
Ответ №2:
Предпочтительнее серверное решение, но если вы хотите сделать это и на стороне клиента (или вместо этого):
Если ваш onsubmit
возвращает false, это остановит отправку.
Я был бы склонен решить эту проблему с помощью:
- Временное отключение кнопки на секунду, чтобы пользователь не мог снова быстро отправить и / или
- Игнорирование последующих попыток отправки, если не прошло хотя бы секунды.
Я бы не стал пытаться поставить в очередь все отправленные сообщения и распределить их, потому что пользователь может нажимать на кнопку много раз.
Итак, следующее игнорирует дополнительные попытки отправки, сделанные в течение секунды, и отключает кнопку отправки. Зачем делать оба? Если в форме есть поля, пользователь может отправить, нажав клавишу Ввода.
<form name="test" action="http://mydomain.dyndns.org/?8" target="results"
method="POST" onSubmit="return testSubmit();">
<input id="submitButton" type="submit" value=" ← Move Left " />
</form>
<script>
var allowSubmit = true;
function testSubmit() {
if (!allowSubmit)
return false;
allowSubmit = false;
document.getElementById("submitButton").disabled = true;
setTimeout(function() {
allowSubmit = true;
document.getElementById("submitButton").disabled = false;
}, 1000);
return true;
}
</script>
Обратите внимание на этот код: onSubmit="return testSubmit();"
— вам нужен «возврат» там, или значение, которое возвращается, testSubmit()
отбрасывается, и отправка не будет предотвращена.