Предотвратите двойное представление форм в jQuery

У меня есть форма, которая берет некоторое время, чтобы сервер обработал. Я должен удостовериться, что пользователь ожидает и не пытается повторно отправить форму путем нажатия кнопки снова. Я пытался использовать следующий код jQuery:

<script type="text/javascript">
$(document).ready(function() {
    $("form#my_form").submit(function() {
        $('input').attr('disabled', 'disabled');
        $('a').attr('disabled', 'disabled');
        return true;
    });
});
</script>

Когда я пробую это в Firefox, все отключено, но форма не отправлена ни с одними из данных POST, которые это, как предполагается, включает. Я не могу использовать jQuery для представления формы, потому что мне нужна кнопка, которая будет отправлена с формой, поскольку существует несколько кнопок отправки, и я определяю, который использовался, которым значение включено в POST. Мне нужна форма, которая будет отправлена, как это обычно, и я должен отключить все правильное, после этого происходит.

Спасибо!

164
задан Community 4 August 2019 в 04:08
поделиться

1 ответ

... но форма не отправляется с никакими данными POST, которые она должна была бы включать.

Правильно. Отключенные имена/значения элементов формы не будут отправлены на сервер. Вы должны установить их как readonly элементы.

Кроме того, якоря нельзя отключить подобным образом. Вам придется либо удалить их HREF (не рекомендуется), либо запретить их поведение по умолчанию (лучший способ), например:

<script type="text/javascript">
$(document).ready(function(){
    $("form#my_form").submit(function(){
      $('input').attr('readonly', true);
      $('input[type=submit]').attr("disabled", "disabled");
      $('a').unbind("click").click(function(e) {
          e.preventDefault();
          // or return false;
      });
    });
</script>
4
ответ дан 23 November 2019 в 21:12
поделиться
Другие вопросы по тегам:

Похожие вопросы: