Как я могу отложить отправку формы? - PullRequest
1 голос
/ 25 октября 2011

У меня есть веб-сайт, который использует кнопки отправки для отправки команд на удаленный микропроцессор. Если пользователь нажимает кнопку «Отправить» слишком много раз за короткое время, удаленный микропроцессор и программное обеспечение аварийно завершают работу. Я думал, что смогу добавить задержку в одну секунду между каждым нажатием кнопки «отправить», чтобы она не вылетала. Вот что у меня есть для кнопки отправки.

<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>

Ответы [ 2 ]

3 голосов
/ 25 октября 2011

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

2 голосов
/ 25 октября 2011

Бэкэнд-решение предпочтительнее, но если вы хотите сделать это также на стороне клиента (или вместо):

Если ваш onsubmit вернет false, он прекратит отправку.

Я был бы склонен решить это следующим образом:

  1. Временное отключение кнопки на секунду, чтобы пользователь не мог снова быстро отправить запрос, и / или
  2. Игнорирование последующих попыток отправки, если не прошло хотя бы секунды.

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

Итак, следующее игнорирует дополнительные попытки отправки, сделанные в течение секунды , а отключает кнопку отправки. Почему оба? Если форма содержит поля, пользователь может отправить ее, нажав клавишу Enter.

<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(), отбрасывается, и отправка не будет предотвращена.

...