jQuery使用require_from_group

时间:2015-06-30 22:18:48

标签: jquery jquery-validate

以不同的方式提出一个新问题,因为我的最后一个问题与已经回答的问题过于相似。

我有三个领域的基本表格; fieldOnefieldTwofieldThree

fieldOnefieldTwo相互依赖,这意味着必须至少提供其中一个。应始终提供fieldThree。因此,总会提供至少两个字段,最多三个。

这是我到目前为止的代码。

var validator = $("#my_form").validate({
    groups: {
        datagroup: "fieldOne fieldTwo"
    },
    rules: {
        fieldOne: {
            require_from_group: [1, '.datagroup'],
            email: true,
            maxlength: {
                param: 40,
                depends: function (element) {
                    var valTwo = $('#fieldTwo').val();
                    var valThree = $('#fieldThree').val();
                    return ((!valTwo || (valTwo.length < 8) || (valTwo.length > 18) && !valThree));
                }
            }
        },
        fieldTwo: {
            require_from_group: [1, '.datagroup'],
            minlength: {
                param: 8,
                depends: function (element) {
                    var valOne = $('#fieldOne').val();
                    var valThree = $('#fieldThree').val();
                    return ((!valOne || (valOne.length > 40))&& !valThree);
                }
            }
        },
        fieldThree: {
            required: {
                depends: function(element){
                    var valOne = $('#fieldOne').val();
                    var valTwo = $('#fieldTwo').val();
                    return (!valOne || !valTwo);
                }
            }
        }
    }
});

现在几乎是我需要它的时候了。如果我仅提供fieldThree,它会要求我输入另外两个字段中的至少一个。如果我仅提供fieldOne,则会要求我完成fieldThree等。

虽然只有一件事我似乎无法克服。我似乎只通过提供fieldOnefieldTwo来完成验证。总是需要fieldThree,所以这不应该通过。

如何阻止这种情况发生?实际上,只有三种情况可以通过:

fieldOne with fieldThree
fieldTwo with fieldThree
fieldOne and fieldTwo with fieldThree

这是我想要实现的目标。

由于

1 个答案:

答案 0 :(得分:2)

我认为这里的一个问题是你的fieldThree总是返回true并且不会误解我但我认为整件事似乎有点过于复杂,但也许我错过了一些东西。我不知道你的表格实际上是什么样的,但这里有一个例子,我认为这就是你如何处理你想要的东西。

jQuery.validator.setDefaults({
  debug: true,
  success: "valid"
});

var validator = $("#my_form").validate({
  rules: {
    fieldOne: {
      require_from_group: [1, '.datagroup'],
      email: true,
      maxlength: 40
    },
    fieldTwo: {
      require_from_group: [1, '.datagroup'],
      maxlength: 18,
      minlength: 8
    },
    fieldThree: {
      required: true
    }
  }
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js"></script>
<script src="http://jqueryvalidation.org/files/dist/jquery.validate.min.js"></script>
<script src="http://jqueryvalidation.org/files/dist/additional-methods.min.js"></script>

<form id="my_form">
  <label for="fieldOne">Email: </label>
  <input type="email" class="datagroup" id="fieldOne" name="fieldOne">
  <br/>
  <label for="fieldTwo">Name: </label>
  <input type="text" class="datagroup" id="fieldTwo" name="fieldTwo">
  <br/>
  <label for="fieldThree">Accept: </label>
  <input type="checkbox" id="fieldThree" name="fieldThree" />
  <br/>
  <input type="submit" value="Validate!">
</form>

有一点需要注意,请maxlength email 40上的PM> Install-Package Microsoft.Azure.Management.WebSites -Pre。据我所知,电子邮件中的最大字符数约为250,但对此并不十分确定,我认为这是电子邮件过滤器的一部分。不,只需输入大约1000个字符而不触发验证。

希望这有帮助。