以不同的方式提出一个新问题,因为我的最后一个问题与已经回答的问题过于相似。
我有三个领域的基本表格; fieldOne
,fieldTwo
和fieldThree
。
fieldOne
和fieldTwo
相互依赖,这意味着必须至少提供其中一个。应始终提供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
等。
虽然只有一件事我似乎无法克服。我似乎只通过提供fieldOne
和fieldTwo
来完成验证。总是需要fieldThree
,所以这不应该通过。
如何阻止这种情况发生?实际上,只有三种情况可以通过:
fieldOne with fieldThree
fieldTwo with fieldThree
fieldOne and fieldTwo with fieldThree
这是我想要实现的目标。
由于
答案 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个字符而不触发验证。
希望这有帮助。