Form onsubmit returns false 并且仍然继续提交表单
Form onsubmit returns false and still continues submitting the form
我正在使用 php5.6 并打印 html 并尝试获得确认提示以使用 JS。从 webpage 订购产品时,它应该询问用户是否确定已下订单并且 he/she 在“确定”后继续结帐。已取消以继续购物或更改个人信息。
提示有效,if(!conf)
被执行并且页面被重定向到顶部,但它仍然提交表单并在取消时创建订单。这是代码,如果重要的话,它会包含在其他文件中。在Whosebug上搜索了一段时间,没发现这种问题。尝试将 '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();
在表格部分应该是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
}
感谢大家对我的问题的贡献!我已经解决了,所以问题是已经有一个 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 = '#' 的作用相同。无论如何,现在我只需要担心翻译和更改其他文件而不是用现金支付。
我正在使用 php5.6 并打印 html 并尝试获得确认提示以使用 JS。从 webpage 订购产品时,它应该询问用户是否确定已下订单并且 he/she 在“确定”后继续结帐。已取消以继续购物或更改个人信息。
提示有效,if(!conf)
被执行并且页面被重定向到顶部,但它仍然提交表单并在取消时创建订单。这是代码,如果重要的话,它会包含在其他文件中。在Whosebug上搜索了一段时间,没发现这种问题。尝试将 '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();
在表格部分应该是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
}
感谢大家对我的问题的贡献!我已经解决了,所以问题是已经有一个 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 = '#' 的作用相同。无论如何,现在我只需要担心翻译和更改其他文件而不是用现金支付。