在jquery validate中实现require_from_group

时间:2015-02-03 20:38:53

标签: jquery asp.net-mvc jquery-validate

我正在尝试获取一组输入以验证为一个。因此,如果任何输入为空,它将在输入下方显示一条消息。我一直在关注另一个SO回答here。 4个输入将无法验证。如果没有提交数据,他们就不会做任何事情。我的其他输入验证就好了。 这是我的表格:

<div class="creditcard form-group">
    <h2>Credit Card</h2>
    @Html.TextBoxFor(model => model.cardNumber, new { @class = "form-control cc", @id = "CardNum", @placeholder = "Card Number" })
    @Html.TextBoxFor(model => model.name, new { @class = "form-control cap cc", @id = "FullName", @placeholder = "Full Name" })
    @Html.TextBoxFor(model => model.expDate, new { @class = "form-control cc", @id = "CardExp", @placeholder = "MM/YY" })
    @Html.TextBoxFor(model => model.cvv, new { @class = "form-control cc", @id = "CardCVV", @placeholder = "CVV" })
    @Html.HiddenFor(model => model.ccType)
    ....

我正在验证的jquery:

$.validator.addMethod("require_from_group", function (value, element, options) {
    var valid = $(options[1], element.form).filter(function () {
        return $(this).val();
    }).length >= options[0];
    return valid;
    }, $.validator.format("Please fill out at least {0} of these fields."));
    $("form").validate({
        rules: {
            cardNumber: { require_from_group: [2, ".cc"] },
            name: { require_from_group: [2, ".cc"] },
            expDate: { require_from_group: [2, ".cc"] },
            cvv: { require_from_group: [2, ".cc"] }
        }
    });

如果有帮助,这是MVC 5.

1 个答案:

答案 0 :(得分:1)

您正试图按照五年前的答案。从那时起,默认的require_from_group方法的错误已得到修复;并且该功能目前比您手动创建的功能复杂得多。

因此,您只需要包含the additional-methods.js file即可使用默认的require_from_group方法。否则,您可以将此方法从additional-methods.js文件中复制出来,但IMO最好包含该文件以备将来维护。

如果这样做无法解决问题,您需要向我们展示 呈现的 HTML标记,如浏览器源代码所示,以检查您是否已经犯了其他错误。

工作演示:http://jsfiddle.net/jo65e26a/


  

我正试图获得一组输入以验证为一个。

这不是require_from_group的意图,也不是你如何配置它......

require_from_group: [2, ".cc"]

2参数表示您的四人组中的任何两个输入都是必需的。如果您需要填写所有四个参数,那么您可以将参数设置为4,但这与仅在所有四个输入上使用required规则完全没有区别。

文档:require_from_group

也许您打算将验证消息组合成一个?如果是,那么您将使用the groups option

groups: {
    ccGroup: "cardNumber name expDate cvv"
}

DEMO 2:http://jsfiddle.net/sx7cda0c/1/


还有一个名为skip_or_fill_minimum的方法,这意味着您需要在组中设置最小数量的字段,否则,可以跳过该组。不确定这是否是你想要的。