Form onsubmit возвращает false и продолжает отправку формы

#javascript #php #forms #prompt #onsubmit

#javascript #php #формы #запрос #onsubmit

Вопрос:

Я использую php5.6 и печатаю html и пытаюсь получить подтверждение propmt для работы с JS. Заказывая товары у weppage, он должен спросить, уверен ли пользователь, что заказ сделан, и он / она переходит к оформлению заказа после «ok». Отменено для продолжения покупок или изменения личной информации.

Запрос работает, if(!conf) выполняется, и страница перенаправляется наверх, но он по-прежнему отправляет форму и создает заказ на отмену. Вот код, который включается в другой файл, если это имеет значение. некоторое время искал stackoverflow и не видел такой проблемы. Пытался поставить ‘onclick’ на кнопку, но это было еще хуже и привело к некоторым ошибкам.

 ob_start();
    ?>

    <script type="text/javascript">
        function continueToPayment() {
            var conf = confirm("<?php echo SQL::Translate('payment_confirm_text') ?>");
            if(!conf) {
                window.location.href = '#';
                return false;
            }
            else{
                return true;
            }
        }
    </script>

    <?php
    print "<form onsubmit='return continueToPayment()' action='" . SQL::Table("Pages")->Href("thank_you") . "?pm=cashamp;ord=$next_reference_number' method="POST">";
    $amount = number_format((($_SESSION['sc_data']['final_total'])/100),2,".","");
    print "<input type='hidden' name='action' value='send_cash_order'>";

    echo ReturnOrderSubmitInfoHtml();

    print "<button type='submit' id='send_order' class='pc-btn pc-btn-sc'>" . SQL::Translate(PrintPaymentText('cash')) . "</button>";
    print "<br/>";

    print "</form>";

    $form = ob_get_clean();
 

Ответ №1:

Спасибо вам всем за то, что внесли свой вклад в мою проблему! Я решил это, так что проблема заключалась в том, что уже был JS-файл, выполняющий проверку на принятие условий, и я попытался поместить js в php, который, по-видимому, был переопределен этим js-файлом. Я положил

      var conf = confirm("example");
         if(!conf) {
             window.scrollTo(0, 0);
             return false;
        }
 

там и это сработало. Уже был event.preventDefault() . window.scrollTo(0, 0) работал так же, как и window.Расположение.href = ‘#’ . В любом случае, теперь мне нужно беспокоиться только о переводах и вносить изменения в другие файлы, а не платить наличными.

Комментарии:

1. Рад, что вы это поняли!

Ответ №2:

В части формы это должно быть onsubmit='continueToPayment(event)' .

Затем в функции вам нужно остановить поведение формы по умолчанию с помощью event.preventDefault() метода.

 function continueToPayment (event) {
  var conf = confirm("<?php echo SQL::Translate('payment_confirm_text') ?>")
  if (!conf) {
     window.scrollTo(0, 0)
     event.preventDefault()
     return false
  }
  // else case unnecessary
}
 

Комментарии:

1. Он по-прежнему отправляет форму, но теперь после перенаправления в начало корзины покупок кнопка, которая должна выдавать подсказку, выдает ошибку, потому что для этого идентификатора уже есть заказ, поэтому заказ не может быть создан.

2. Я исправил то, что должно быть onsubmit , также убедитесь, что у вас есть event в скобках в определении функции.

3. Дело в том, что он по-прежнему отправляет заказ при 1-й отмене, но затем, после того, как он прокручивается в начало страницы и снова нажимается «Отправить», он сообщает, что встроена ошибка, потому что отсутствует информация в порядке, и приглашение не появляется, так что при нажатии 2-й кнопки происходит правильная вещь. Теперь я думаю, что это что-то другое, чем этот JS.