jQuery验证 - 两个必填字段一个错误消息

3

我一直在尝试使用jQuery验证插件的“group”选项来验证两个下拉框,这两个下拉框都是必需的,但只应显示一个错误消息:

JavaScript代码:

$('form').validate({
    groups: {
        cardExpiration: 'card_expirationMonth card_expirationYear'
    },
    rules: {
        card_expirationMonth: 'required',
        card_expirationYear: 'required'
    },
    errorPlacement: function (error, element) {
        if (element[0].name === 'card_expirationMonth' || element[0].name === 'card_expirationYear') {
            error.prependTo('form');
        }
    }
});

标记:

<form method="post" action="/wherever">
    <div class="-field field-expirationMonth">
        <select name="card_expirationMonth" id="card_expirationMonth">
            <option value="">MM</option>
            <option value="01">01</option>
            <option value="02">02</option>
            <option value="03">03</option>
            <option value="04">04</option>
            <option value="etc">Etc</option>
        </select>
    </div>
    <div class="-field field-expirationYear">
        <select name="card_expirationYear" id="card_expirationYear">
            <option value="">YY</option>
            <option value="2012">12</option>
            <option value="2013">13</option>
            <option value="2014">14</option>
            <option value="2015">15</option>
            <option value="etc">Etc</option>
        </select>
    </div>
</form>

这似乎将错误消息分组,以便仅有一个可见,但它似乎采取的方法是只需要组中的一个字段... 有任何想法吗?
1个回答

0

http://docs.jquery.com/Plugins/Validation/validate#options上的演示展示了以下代码:

$("#myform").validate({
  groups: {
    username: "fname lname"
  },
  errorPlacement: function(error, element) {
     if (element.attr("name") == "fname" 
                 || element.attr("name") == "lname" )
       error.insertAfter("#lastname");
     else
       error.insertAfter(element);
   },
   debug:true
 })

注意 'rules' 不存在。如果你从代码中删除它,也许情况会好转。

是的,我已经阅读了文档 - 规则用于定义应在命名元素上执行的验证方法。(演示中没有规则的原因是使用类属性以声明方式定义了规则)。 - Richard Scarrott
@riscarrott:对我来说,有趣的是页面上的其他示例在validate方法选项中使用“rules”,而这个示例使用class属性。你试过那种方式吗? - John Fisher
是的,我已经尝试过两种方式了 - 其他人通常使用“规则”而不是类或元数据,因为他们正在演示更具体的内容。 - Richard Scarrott
这个插件本应是万能的,但我并不感到满意! - Richard Scarrott
1
@riscarrott:如果你足够勇敢/耐心,你可以在插件代码中找到问题,修复它并将其提交给适当的人。 - John Fisher
是的,我现在正在阅读它,但它有很多代码(>1k行)- 我想它会涵盖所有东西,因为它的大小!我注意到如果你关闭“live”keyup和focusin/out事件,就可以使用组选项,就像演示一样,但我需要这些。我现在正在考虑放弃组选项,并添加一个自定义方法与$.validator.addMethod...不是理想的,但如果我最终得到可用的东西,我会在这里放置任何代码。 - Richard Scarrott

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接