【问题标题】:Validating form data Javascript验证表单数据Javascript
【发布时间】:2013-02-02 04:35:44
【问题描述】:

所以我试图为页面上的两个表单设置表单验证,一次只有一个可见。当一个表单可见(display = 'inline')时,另一个表单是隐藏的(display = 'none')。

我正在连接表单“提交”事件并返回“false”,以便在手动提交表单之前验证表单字段。

我遇到的问题是当我尝试使代码模块化时,即尝试使用通用方法在两个表单上设置表单行为。当我尝试这样做时,我无法在单击提交按钮时不提交表单。但是,当我单独设置两种表单时(重复的方法做同样的事情,只是使用不同的 DOM 对象)我可以让功能正常工作。

下面是我尝试循环遍历两个数组,这些数组在传入的方法中创建 DOM 对象:

if($('#payment_wrapper').length > 0){
    var form_elements = [['#nr_form', '#nr_submit_button', '#nr_notes',     
'#nr_amount'],['#rec_form', '#rec_submit_button', '#rec_notes', '#nr_amount']];
    for (var i = 0; i < 2; i++){
        setupForms(form_elements[i]);
    }
}

    function setupForms(arr){
        $(arr[0]).submit(function(event) {
            (arr[1]).prop('disabled', true);
            validateForm(arr[0], arr[1], arr[2], arr[3]);
            return false;
        });
    }

    function validateForm(form, button, notes, amount){
        var err = false;
        var note = $(button).val().length
        var payment = $(amount).val();
        if(note > 150){
            alert("note is greater than 150");
            $('.payment_errors').text("It seems that your note is too long.  Please make sure it is 150 characters of less")
            $(button).prop('disabled', false);
            err = true; 
        } else if (!validateAmount(payment, button)){
            err = true;
        } else if ( err == false){
            $(form).get(0).submit();
        }
    }

    function validateAmount(payment, submit_button){
        var match = payment.match(/^[0-9]+\.[0-9]{2}/)
        if (payment.length == 0) {
            $('.payment_errors').text("You must enter a valid amount before submitting")
            $(submit_button).prop('disabled', false);
            return false;
        } else if (!match) {
            $('.payment_errors').text("Hmmmm, something is wrong with your payment amount.  Make sure your amount is in the proper format")
            $(submit_button).prop('disabled', false);
            return false;
        } else {
            return true;    
        }
    }

任何帮助将不胜感激。谢谢。

【问题讨论】:

  • 省去一些麻烦,只需使用the jQuery Validate plugin
  • 有什么理由不能使用 jquery validate 插件而不是编写自己的解决方案? docs.jquery.com/Plugins/Validation;此外,如果您将 javascript 和标记放在 js fiddle 中,您将更快地获得帮助。
  • 没有理由特别说明我不使用该插件。更多只是试图理解这个特殊情况。你说的头痛是什么意思?我想要做的比插件更难实现吗?如果有,为什么?

标签: jquery validation


【解决方案1】:

试试

event.preventDefault();

在返回 false 之前。

【讨论】:

  • 当使用 jQuery 时,没有必要两者都做。此外,jQuery's preventDefault() 与单独使用纯 JavaScript 的preventDefault() 并不完全相同。此外,preventDefault() 应该是函数中的第一项,而不像 return false 是最后一项。
猜你喜欢
  • 2015-12-04
  • 2014-11-20
  • 2012-04-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-01-16
相关资源
最近更新 更多