6

每当我使用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:{

    }}
    );
  });

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

感谢帮助。

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

4

2 回答 2

5

@Tats_innit 在require_from_group这里发布了一个自定义:https ://stackoverflow.com/posts/13127475

事实证明,这还修复了一个已记录的 github 错误,该错误是require_from_groupadditional-method-1.10.jsfor 的1.10.0 版本中发布的jquery.validation

github 问题: require_from_group 禁用其他规则

Smileyanp@github 在他的解决方案中引用了这篇文章,他在其中重用了@Tats_innit 的函数并创建了一个测试,表明它可以正常工作,并且不会禁用对之前定义的其他规则的验证require_from_group

这篇文章在这里是为了节省时间,因为这个小细节花了 3 小时的谷歌搜索。

使固定:

只需在加载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."));
于 2012-10-30T14:33:13.147 回答
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 文件中。

现在在 GitHub 上有一个更好的修复(滚动到最底部),我在这里复制了它。 这不是我的工作,写它的 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...
于 2014-05-19T17:38:48.047 回答