jQuery ValidationEngine: Как проверить, что хотя бы одно из набора полей не пустое? - PullRequest
15 голосов
/ 11 февраля 2011

В нашем проекте мы используем ValidationEngine, и у нас нет возможности заменить его другим плагином.

Наша форма имеет десять входных данных, и некоторые из них являются необязательными, но по крайней мере одно из дополнительных полей должно быть включено.

Итак, как вы проверяете входные данные в этом случае?

Пример:

form
  input1
  input2
  intpu3

input1: обязательно

Должен присутствовать хотя бы один из input2 и input3 - если оба значения пусты, проверка должна завершиться неудачей.

Ответы [ 6 ]

17 голосов
/ 08 июня 2011

Механизм проверки теперь поддерживает группу Validation.Go to jQuery плагин проверки формы @ 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"/>
4 голосов
/ 09 мая 2011

Похоже, что плагин ValidationEngine позволяет вам указать правило валидации, которое использует пользовательскую функцию для определения валидности.

Если вы добавляете класс валидации в input1, как это ...1005 *

Тогда 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 голосов
/ 02 февраля 2014

Если кто-то хочет, чтобы 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"
}
0 голосов
/ 10 мая 2011
!!$('#input2,#input3').filter('[value]').length
0 голосов
/ 09 мая 2011

В плагине проверки 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;
                        }

                    }
                }
0 голосов
/ 06 мая 2011

Одним из решений может быть добавление проверок перед проверкой и удаление после ее завершения.

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.";
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...