Jquery .validate require_from_group

时间:2012-05-06 10:43:38

标签: javascript jquery validation

每当我使用require_from_group时,它都会禁用所有其他验证。有什么想法吗?

还有一种方法可以将“Telefon”和“Mobitel”分组并应用require_from_group吗?

  $(document).ready(function(){
    $("#fncMain").validate(
    {
    /*groups:{Call:"Telefon Mobitel"},*/
    rules:{
        Davcna:{required:true,exactlength:5, digits:true},
        Idzav:{required:true,exactlength:5, digits:true},
        Maticna:{required:true,exactlength:5, digits:true},
        Telefon:{require_from_group: [1,".callme"]},
        Mobitel:{require_from_group: [1,".callme"]}
    }, 
    messages:{

    }}
    );
  });

此处未包含的所有其他字段使用简单的“必需”类。如果我删除了应用于“Telefon”和“Mobitel”的require_from_group规则,则所有其他字段验证都可以正常工作。

感谢您的帮助。

编辑 html:http://cl.ly/29391q0Q3G231T2I380m(太长了,无法在此处发布)

2 个答案:

答案 0 :(得分:5)

@Tats_innit在此处发布了自定义require_from_grouphttps://stackoverflow.com/posts/13127475

事实证明,这也修复了require_from_group additional-method-1.10.js中{1}}版本的jquery.validation版本已发布的已记录的github错误。

github问题: require_from_group disables other rules

smileyanp @ github在他的解决方案中引用了这篇文章,他重用了@ Tats_innit的功能并创建了一个test,显示它正常工作并且不会禁用验证关于require_from_group之前定义的其他规则。

这篇帖子可以节省时间,因为这会花费3小时的谷歌搜索这么小的细节。

<强> FIX:

只需更新additional-method-1.10.js或在加载additional-method-1.10.js后执行此代码(覆盖该功能)。

jQuery.validator.addMethod("require_from_group", function(value, element, options) {
  var numberRequired = options[0];
  var selector = options[1];
  var fields = $(selector, element.form);
  var filled_fields = fields.filter(function() {
    // it's more clear to compare with empty string
    return $(this).val() != ""; 
  });
  var empty_fields = fields.not(filled_fields);
  // we will mark only first empty field as invalid
  if (filled_fields.length < numberRequired && empty_fields[0] == element) {
    return false;
  }
  return true;
// {0} below is the 0th item in the options field
}, jQuery.format("Please fill out at least {0} of these fields."));

答案 1 :(得分:3)

编辑:实际上看起来此修补程序已合并到1.12.0版本中,您可以在此处找到CDN指针:http://jqueryvalidation.org/

供参考:

http://ajax.aspnetcdn.com/ajax/jquery.validate/1.12.0/jquery.validate.js
http://ajax.aspnetcdn.com/ajax/jquery.validate/1.12.0/jquery.validate.min.js
http://ajax.aspnetcdn.com/ajax/jquery.validate/1.12.0/additional-methods.js
http://ajax.aspnetcdn.com/ajax/jquery.validate/1.12.0/additional-methods.min.js

在我找到上面的解决方案之前,我在下面找到了这个代码,所以我的建议是使用上面引用的CDN链接,而不是将下面的代码粘贴到你的JS文件中。

有一个better fix out on GitHub now(滚动到最底部),我在这里复制了。 这不是我的工作 ,编写它的GitHub用户sfreytag似乎不是SO的贡献者,我只是想把它变成SO所以其他找到的人这不必在GitHub上挖掘线程:

jQuery.validator.addMethod("require_from_group", function(value, element, options) {
    var validator = this;
    var selector = options[1];
    var validOrNot = $(selector, element.form).filter(function() {
        return validator.elementValue(this);
    }).length >= options[0];

    if(!$(element).data('being_validated')) {
        var fields = $(selector, element.form);
        fields.data('being_validated', true);
        fields.valid();
        $(element.form).valid();
        fields.data('being_validated', false);
    }
    return validOrNot;
}, jQuery.format("Please fill at least {0} of these fields."));

到目前为止,我已经对此进行了有限的测试,但它似乎正如您所期望的那样工作,所有验证都会发生(而不是像以前那样通过任何非“require_from_group”验证),所以我很满意它至今。我刚刚在JS代码顶部的验证器声明之后添加它:

$.validator.setDefaults({
    debug: true,
    success: "valid"
});

jQuery.validator.addMethod("require_from_group", function(value, element, options) {
    var validator = this;
    var selector = options[1];
   //continuation of code...