jQuery 使用 require_from_group 之外的另一个输入验证插件问题
jQuery Validate plugin issue with another input outside of require_from_group
以不同的方式提出一个新问题,因为我的上一个问题与已经回答的问题太相似了。
我有一个包含三个字段的基本表单; 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
这就是我想要实现的目标。
谢谢
我认为这里的一个问题是您的 fieldThree
总是 returns 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>
还有一件事要注意,请注意 40
的 email
上的 maxlength
。据我所知,一封电子邮件中的最大字符数约为 250 个,但对此不太确定 ,我认为这是电子邮件过滤器的一部分 。不,只是输入了大约 1000 个字符而没有触发验证。
希望这对您有所帮助。
以不同的方式提出一个新问题,因为我的上一个问题与已经回答的问题太相似了。
我有一个包含三个字段的基本表单; 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
这就是我想要实现的目标。
谢谢
我认为这里的一个问题是您的 fieldThree
总是 returns 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>
还有一件事要注意,请注意 40
的 email
上的 maxlength
。据我所知,一封电子邮件中的最大字符数约为 250 个,但对此不太确定 ,我认为这是电子邮件过滤器的一部分 。不,只是输入了大约 1000 个字符而没有触发验证。
希望这对您有所帮助。