【问题标题】:Need to do HTML5 form validation before click event happens需要在点击事件发生之前进行 HTML5 表单验证
【发布时间】:2013-07-05 00:40:08
【问题描述】:

我目前有一个表单,可以根据用户的操作单击两个提交按钮之一。一个按钮只会将表单提交到另一个 php 页面,另一个按钮将引入 Stripes 结帐覆盖,然后在填写完毕后,将提交到另一个 php 页面。如果表单无效,我希望我的 html5/jquery 验证停止覆盖。

目前,如果表单无效并且用户单击常规提交按钮,它什么也不做并显示需要更正的字段(我想要的)。如果表单无效并且用户单击 Stripe 覆盖按钮,则覆盖出现,但是当用户填写字段并单击提交时,覆盖消失并且没有任何反应,因为表单无效(它向用户显示了什么字段需要更正)。这并不理想,因为用户必须修复任何无效的字段,然后在提交之前再次填写覆盖表单。同样,我希望在表单完全有效之前,两个按钮都不做任何事情。

<button type='submit' name='saveSubmit' id='saveSubmit'>Save Order</button>

<button type='submit' name="customButton" id="customButton">Save Order and Pay</button>

以及 jQuery 函数:

 <script>
$(document).ready(function () {
$('form.h5-defaults').h5Validate();
});
$('form.h5-defaults').submit(function () { return $('form.h5-defaults').h5Validate('allValid'); });


$('#customButton').click(function(){
  var token = function(res){
    var $input = $('<input type=hidden name=stripeToken />').val(res.id);
    $('form').append($input).submit();
  };

    var pennNewExtra = Math.abs(newExtra) * 100;

  StripeCheckout.open({
    key:         'xxxxxx',
    amount:      pennNewExtra,
    currency:    'usd',
    name:        'xxxxxx',
    description: 'Add-Ons - $' + Math.abs(newExtra) + '.00',
    panelLabel:  'Checkout',
    token:       token
  });

  return false;
});
</script>

【问题讨论】:

    标签: jquery validation stripe-payments


    【解决方案1】:

    您永远不想将动作事件挂在提交按钮上。您真正需要知道的是在表单提交事件中按下了哪个(如果有)按钮。

    这就是我的处理方式http://jsfiddle.net/Gf4Cg/4/

    var submitButton;
    
    $("form button[type=submit]").click(function () {
        submitButton = this.name;
    });
    
    $("form").submit(function (evt) {
        if ( /* !validated */ false) 
            return false;
    
        if (submitButton == "submit2") {
            submitButton = null; // reset marker for future submits
            alert("Show more stuff!")
            return false;
        }
    
        // regular submit
        return true;
    });
    
    1. 在按钮单击时添加事件,该事件仅记住在本地变量中单击了哪个按钮。
    2. 将所有实际处理移至表单提交事件中。

    【讨论】:

    • 感谢 Ilia G。我正在尝试您的方法,但仍然没有做对。当存在无效表单并且用户单击 customButton 按钮时,覆盖仍然会出现。我的代码对于这条评论来说太长了,所以它保存在这里 - jsfiddle.net/Gf4Cg/3 我做错了什么?
    • 第一个明显的问题是 h5ValidateStripeCheckout 未定义。其次,您在提交表单时做了一些奇怪的事情,我想我已经尽可能多地纠正了jsfiddle.net/Gf4Cg/6
    • 是的,对不起,我应该提到 h5Validate 和 StripeCheckout 是在别​​处定义的。好吧,我无法完全让您的解决方案发挥作用,但是看看您是如何做一些事情的确实帮助我用我的原始代码弄清楚了。它可能不漂亮或不理想,但它现在可以根据需要工作。如果表单无效,则两个按钮都不会提交,只会向用户显示哪些字段无效。现在,仅当表单有效且一切正常提交时才会弹出叠加层。感谢帮助! - jsfiddle.net/Gf4Cg/7
    猜你喜欢
    • 2016-06-23
    • 1970-01-01
    • 1970-01-01
    • 2010-09-19
    • 2012-11-30
    • 2011-10-15
    • 1970-01-01
    • 2016-09-19
    • 2015-10-29
    相关资源
    最近更新 更多