【问题标题】:implementing require_from_group in jquery validate在 jquery validate 中实现 require_from_group
【发布时间】:2015-02-03 20:38:53
【问题描述】:

我正在尝试获取一组输入以验证为一个。因此,如果任何输入为空,它将在输入下方显示一条消息。我一直在关注另一个 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。

【问题讨论】:

  • 您在View 上的ValidationMessageFor 助手在哪里?
  • 浏览器呈现的相关 HTML 标记在哪里? JavaScript 只能看到/使用发送到浏览器的实际 HTML 源代码,它无法看到服务器上的 ASP 代码。

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


【解决方案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"
}

演示 2:http://jsfiddle.net/sx7cda0c/1/


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

【讨论】:

  • 谢谢,我确实希望所有 4 个都是必需的,所以我想我想要组选项。
  • @dmikester1,然后只需将它们设置为required,就可以使用groups 选项将4 条消息合并为一个。您还可以在 errorPlacement 选项中使用条件将消息放置在布局中,如下所示:jsfiddle.net/sx7cda0c/1
  • 这似乎应该有效。我认为这与我使用 MVC 有关。使用 MVC 时是否需要以不同方式添加规则?在我的 document.ready 函数中,我目前有以下代码:$("form").validate({ rules: { .....
  • 没关系,最后一条评论,我在挖掘了更多之后才弄明白。
猜你喜欢
  • 2016-09-23
  • 1970-01-01
  • 1970-01-01
  • 2018-09-08
  • 1970-01-01
  • 2011-11-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多