【问题标题】:Form onsubmit returns false and still continues submitting the form表单 onsubmit 返回 false 并仍然继续提交表单
【发布时间】:2021-03-29 01:33:19
【问题描述】:

我正在使用 php5.6 并打印 html 并尝试获得确认提示以使用 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=cash&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();

【问题讨论】:

    标签: javascript php forms prompt onsubmit


    【解决方案1】:

    在表单部分应该是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
    }
    

    【讨论】:

    • 它仍然提交表单,但是现在重定向到购物车顶部后,应该给出提示的按钮给出错误,因为该 id 上已经有订单,因此无法创建订单。
    • 我已经更正了 onsubmit 中应该包含的内容,同时确保函数定义中的括号中有 event
    • 问题是它仍然在第一次取消时提交订单,但是在滚动到页面顶部并再次按下发送后,它说内置错误,因为缺少订单信息并且没有出现提示,所以在第二次按下按钮时会发生正确的事情。现在我认为它与这个 JS 不同。
    【解决方案2】:

    感谢大家为我的问题做出贡献!我已经解决了,所以问题是已经有一个 JS 文件在检查是否接受术语,我试图将 js 放到 php 中,这显然被那个 js 文件覆盖了。我放了

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

    在那里,它奏效了。已经有一个event.preventDefault()。 window.scrollTo(0, 0) 与 window.location.href = '#' 相同。无论如何,现在我只需要担心翻译和更改其他文件,而不是用现金支付。

    【讨论】:

    • 很高兴你知道了!
    猜你喜欢
    • 1970-01-01
    • 2012-03-21
    • 1970-01-01
    • 2011-06-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-09-13
    相关资源
    最近更新 更多