JQuery ValidationEngine: Как проверить, что хотя бы один из множества полей не пуст?
В нашем проекте мы используем ValidationEngine, и у нас нет возможности заменить его другим плагином.
Наша форма имеет десять входов, а некоторые из них являются необязательными, но должно быть включено хотя бы одно из необязательных полей.
Итак, как вы проверяете ввод в этом случае?
Пример:
form
input1
input2
intpu3
input1: required
Должен присутствовать хотя бы один из входных и входных данных3 - если обе ошибки пустые, проверка не должна выполняться.
Ответы
Ответ 1
Механизм проверки теперь поддерживает группу Validation.Go до плагин проверки формы jQuery @github и ake посмотрите groupRequired
. Синтаксис выглядит примерно так.
<input value="" class="validate[groupRequired[payments]]" type="text" name="creditcard" id="creditcard" />
<input class="validate[groupRequired[payments]]" type="text" id="paypal" name="paypal"/>
Ответ 2
Похоже, что плагин 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
Ответ 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"
}
Ответ 4
Одним из решений может быть присоединение валидации перед проверкой и удалением после завершения проверки.
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.";
}
}
Ответ 5
!!$('#input2,#input3').filter('[value]').length
Ответ 6
В плагине проверки 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;
}
}
}