Иногда, когда ответ медленный, можно несколько раз нажать кнопку отправки.
Как этого не допустить?
javascript
submit
О, мой бог
источник
источник
Ответы:
Используйте ненавязчивый javascript, чтобы отключить событие отправки в форме после того, как оно уже было отправлено. Вот пример использования jQuery.
РЕДАКТИРОВАТЬ: исправлена проблема с отправкой формы без нажатия кнопки отправки. Спасибо, Ичибан.
источник
return true
? Я думаю, что первоначальная отправка должна работать и без этого.return true
подразумевается, если опущено.$(this).find("input[type='submit']").attr('disabled', 'disabled').val('submiting'); return true; });
Я попробовал решение Вансти вместе с ненавязчивой проверкой asp mvc 3, и если проверка клиента не удалась, код все равно будет запущен, а формы отключена навсегда. Я не могу отправить заявку повторно после исправления полей. (см. комментарий bjan)
Поэтому я модифицировал сценарий Вансти следующим образом:
источник
Управление отправкой формы на стороне клиента может быть реализовано довольно элегантно, если обработчик onsubmit скроет кнопку отправки и заменит ее анимацией загрузки. Таким образом, пользователь получает немедленную визуальную обратную связь в том же месте, где произошло его действие (щелчок). В то же время вы предотвращаете отправку формы в другой раз.
Если вы отправляете форму через XHR, имейте в виду, что вам также необходимо обрабатывать ошибки отправки, например тайм-аут. Вам придется снова отобразить кнопку отправки, потому что пользователю необходимо повторно отправить форму.
С другой стороны, llimllib поднимает очень важный вопрос. Вся проверка формы должна происходить на стороне сервера. Это включает в себя несколько проверок отправки. Никогда не доверяйте клиенту! Это не только случай, если отключен javascript. Вы должны иметь в виду, что весь код на стороне клиента можно изменять. Это довольно сложно представить, но html / javascript, обращающийся к вашему серверу, не обязательно является написанным вами html / javascript.
Как предлагает llimllib, сгенерируйте форму с идентификатором, уникальным для этой формы, и поместите его в скрытое поле ввода. Сохраните этот идентификатор. При получении данных формы обрабатывать их только при совпадении идентификатора. (Также связать идентификатор с сеансом пользователя и сопоставить его также для дополнительной безопасности.) После обработки данных удалите идентификатор.
Конечно, время от времени вам нужно будет очистить идентификаторы, для которых никогда не были отправлены данные формы. Но, скорее всего, на вашем веб-сайте уже используется какой-то механизм «сборки мусора».
источник
источник
<form onsubmit="return (typeof submitted == 'undefined') ? (submitted = true) : !submitted">
или записиvar submitted = false;
в нужный момент вашего скрипта, чтобы избежать следующее сообщение об ошибке:Uncaught ReferenceError: submitted is not defined
.Вот простой способ сделать это:
источник
Отключите кнопку отправки сразу после щелчка. Убедитесь, что вы правильно обрабатываете проверки. Также сохраните промежуточную страницу для всех операций обработки или БД, а затем перенаправьте на следующую страницу. Это гарантирует, что обновление второй страницы не повлечет за собой другую обработку.
источник
form page ---submits to---> form_submission_script.php ---after saving, redirects to---> form_thankyou.html
Хешируйте текущее время, сделайте его скрытым вводом в форме. На стороне сервера проверяйте хэш каждой отправки формы; если вы уже получили этот хэш, значит, вы получили повторную отправку.
изменить: полагаться на javascript - не лучшая идея, поэтому вы все можете продолжать голосовать за эти идеи, но у некоторых пользователей она не будет включена. Правильный ответ - не доверять вводу пользователя на стороне сервера.
источник
Вы также можете отобразить индикатор выполнения или счетчик, чтобы указать, что форма обрабатывается.
источник
Используя JQuery, вы можете:
&
источник
Я знаю, что вы пометили свой вопрос с помощью javascript, но вот решение, которое вообще не зависит от javascript:
Это шаблон веб-приложения под названием PRG , и вот хорошая статья , описывающая его.
источник
Вы можете предотвратить множественную отправку просто с помощью:
источник
Workin =true;
. Двойные сабмиты по-прежнему возможны, но их меньше.Самый простой ответ на этот вопрос: «Иногда, когда ответ медленный, можно нажимать кнопку отправки несколько раз. Как предотвратить это?»
Просто отключите кнопку отправки формы, как показано ниже.
Это отключит кнопку отправки при первом нажатии для отправки. Также, если у вас есть некоторые правила проверки, он будет работать нормально. Надеюсь, это поможет.
источник
На стороне клиента вы должны отключить кнопку отправки после того, как форма будет отправлена с кодом javascript, например, как метод, предоставляемый @vanstee и @chaos.
Но существует проблема из-за задержки сети или ситуации с отключенным javascript, когда вы не должны полагаться на JS, чтобы этого не произошло.
Итак, на стороне сервера вы должны проверить повторную отправку от одних и тех же клиентов и опустить повторяющуюся, которая кажется ложной попыткой со стороны пользователя.
источник
Вы можете попробовать плагин safeform jquery.
источник
Самое простое и элегантное решение для меня:
Ссылка для получения дополнительной информации ...
источник
Используйте этот код в своей форме. Он будет обрабатывать несколько кликов.
точно будет работать.
источник
Это позволяет отправлять каждые 2 секунды. В случае предварительной проверки.
источник
лучший способ предотвратить отправку нескольких - просто передать идентификатор кнопки в метод.
источник
Сделать это с помощью javascript немного проще. Ниже приведен код, обеспечивающий желаемую функциональность:
источник
Самое простое решение - отключить кнопку при нажатии, включить ее после завершения операции. Чтобы проверить аналогичное решение на jsfiddle:
И вы можете найти другое решение по этому поводу .
источник
Для меня это очень хорошо работает. Он отправляет ферму и отключает кнопку, а через 2 секунды активирует кнопку.
В ECMA6 Syntex
источник
Просто чтобы добавить к возможным ответам без обхода проверки ввода в браузере
источник
Альтернатива тому, что предлагалось ранее:
источник