每当我使用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(太长了,无法在此处发布)
答案 0 :(得分:5)
@Tats_innit在此处发布了自定义require_from_group
:https://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...