在我们的项目中,我们使用ValidationEngine,我们无法用另一个插件替换它。
我们的表单有十个输入,其中一些是可选的,但必须至少包含一个可选字段。
那么,在这种情况下如何验证输入?
样品:
form
input1
input2
intpu3
input1:required
必须存在input2和input3中的至少一个 - 如果两者都为空,则验证失败。
答案 0 :(得分:17)
验证引擎现在支持组验证。转到jQuery form validation plugin @ github并查看groupRequired
。语法看起来像这样。
<input value="" class="validate[groupRequired[payments]]" type="text" name="creditcard" id="creditcard" />
<input class="validate[groupRequired[payments]]" type="text" id="paypal" name="paypal"/>
答案 1 :(得分:4)
ValidationEngine插件似乎允许您指定使用自定义函数确定有效性的验证规则。
如果您在input1
上添加验证类,那么......
<input id="input1" class="validate[required,funcCall[myValidationFunction]]" />
然后ValidationEngine将使用以下函数。你可以在那里放置任何类型的逻辑。如果我正确地阅读了您的情景,那么这应该可以实现您所追求的目标。
function myValidationFunction() {
var input1 = $.trim($("#input1").val());
var input2 = $.trim($("#input2").val());
var input3 = $.trim($("#input3").val());
if (input1.length == 0) {
return "input1 is required";
}
if (input2.length == 0 && input3.length == 0) {
return "Either input2 or input3 is required";
}
// We don't need to return anything if there is no error.
}
以下是源代码中_funcCall
函数的链接:
https://github.com/posabsolute/jQuery-Validation-Engine/blob/master/js/jquery.validationEngine.js#L574
答案 2 :(得分:3)
如果有人想让groupRequired为复选框工作,则需要在groupRequired的语言文件中添加错误消息。例如如果它是jquery.validationEngine-en.js,它应该是这样的:
"groupRequired": {
"regex": "none",
"alertText": "* You must fill one of the following fields",
"alertTextCheckboxMultiple": "* Please select an option",
"alertTextCheckboxe": "* This checkbox is required"
}
答案 3 :(得分:0)
一种解决方案可能是在验证结束后附加验证并在验证结束后删除。
jQuery(document).ready(function(){
jQuery("#formID").validationEngine();
$("#formID").bind("jqv.form.validating", function(event){
var fieldsWithValue = $('input[type=text]').filter(function(){
if($(this).val().length>0){
return true;
}
});
if(fieldsWithValue.length<1){
$('input[type=text]').addClass('validate[required,funcCall[requiredOneOfGroup]]');
}
});
$("#formID").bind("jqv.form.result", function(event, errorFound){
$('input[type=text]').removeClass('validate[required,funcCall[requiredOneOfGroup]]');
});
});
function requiredOneOfGroup(field, rules, i, options){
var fieldsWithValue = $('input[type=text]').filter(function(){
if($(this).val().length>0){
return true;
}
});
if(fieldsWithValue.length<1){
return "At least one field in this set must have a value.";
}
}
答案 4 :(得分:0)
!!$('#input2,#input3').filter('[value]').length
答案 5 :(得分:-1)
jquery验证插件中有一个规定可以进行元素的搜索。
groups: {groupName: "text1 text2 text3 .. so on"}
errorPlacement: function(error, element) {
// Write Done your business logic to display error
if ( element.attr("name") == "text1" -- define other text elements also) {
error.insertAfter("#error_location_placeholder_id");
}else{
error.insertAfter(element);
}
}
并且规则方法中的业务验证至少有一个必须不是空逻辑
groupName:{
required: function(element) {
// Your business logic for validation
if( $("#text1").val().length > 0 ){
return false;
}else{
return true;
}
}
}