15

在我们的项目中,我们使用的是 ValidationEngine,我们没有能力用另一个插件来替换它。

我们的表单有十个输入,其中一些是可选的,但必须至少包含一个可选字段。

那么,在这种情况下如何验证输入?

样本:

form
  input1
  input2
  intpu3

输入1:必填

input2 和 input3 必须至少有一个存在——如果两者都是空的,则验证应该失败。

4

6 回答 6

17

验证引擎现在支持组验证。转到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"/>

于 2011-06-08T15:52:16.043 回答
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

于 2011-05-09T18:54:08.097 回答
4

如果有人想让 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"
}
于 2014-02-02T11:26:11.260 回答
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.";
    }
}
于 2011-05-05T20:34:57.153 回答
0
!!$('#input2,#input3').filter('[value]').length
于 2011-05-10T06:54:23.613 回答
-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;
                        }

                    }
                }
于 2011-05-09T11:11:24.573 回答