【问题标题】:woocommerce order form is getting submitted even if validation fails即使验证失败,也会提交 woocommerce 订单
【发布时间】:2018-07-02 06:54:10
【问题描述】:

我已在 woocommerce 结帐页面上验证出生日期 https://dev.clipcertification.com/checkout/

如果用户在出生日期字段中输入大于 31 的日期和大于 12 的月份,则在按键时,会出现消息“请输入有效日期 (dd-mm-yyyy)”,它在此处工作正常,但在填写表格后,即使验证消息仍然存在,订单也会下达。

我使用了以下代码:

<script>

jQuery(document).ready(function(){

jQuery.validator.addMethod(
    "dateUS",
    function(value, element) {
        var check = false;
        var re = /^\d{1,2}\-\d{1,2}\-\d{4}$/;
        if( re.test(value)){
            var adata = value.split('-');
            var dd = parseInt(adata[0],10); // was gg (giorno / day)
            var mm = parseInt(adata[1],10); // was mm (mese / month)
            var yyyy = parseInt(adata[2],10); // was aaaa (anno / year)
            var xdata = new Date(yyyy,mm-1,dd);
            if ( ( xdata.getFullYear() == yyyy )  && ( xdata.getDate() == dd ) && ( xdata.getMonth () == mm - 1 ) )
                check = true;
            else
               check = false;
        } 
        else
         check = false;

        return this.optional(element) || check;

    }, 
    "Please enter a valid date (dd-mm-yyyy)"
);

// attach Validate plugin to form
jQuery(".checkout").validate();

});
</script>

<form name="checkout" method="post" class="checkout woocommerce-checkout" action="https://dev.clipcertification.com/checkout/" enctype="multipart/form-data" novalidate="novalidate">

<!--- other fields-->
<input type="text" class="input-text  dateUS error" name="billing_dateofbirth" id="billing_dateofbirth" placeholder="Birthdate * (dd-mm-yyyy)" value="02-55-1285" maxlength="10" aria-invalid="true">

<!--- other fields-->

<input type="submit" class="button alt" name="woocommerce_checkout_place_order" id="place_order" value="Place order" data-value="Place order">

【问题讨论】:

  • 有人可以帮我看看吗?
  • 请帮忙。我已经很努力了,无法解决。

标签: jquery wordpress validation woocommerce


【解决方案1】:

在这种情况下,javascript 不会阻止表单的提交。因此,不要使用提交按钮,而是使用 - 获取点击事件,如果所有字段都按要求正确填写,则:

document.getElementById("myForm").submit();

#place_order{visibility: hidden; } /*css*/

$('#place_order').click();

注意:

以后更喜欢使用

<input type="datetime-local">

但尚未支持所有主流浏览器

datetime-local documentation

【讨论】:

  • 我应该将输入类型 submit 替换为 onclick 事件,然后在 onclick 上触发 submit 事件?
  • 是的,你可以这样做,只是为了确保我之前可以正确验证所有字段。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2010-10-19
  • 2020-01-31
  • 2011-02-11
  • 2014-01-13
  • 2018-12-13
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多