我正在使用jquery验证,我已经设置了组。但是,我很难找到从每个组中单独验证每个组的最佳方法。
为了说明这一点:
我有城市,州和邮政(按此顺序)。如果有人为zip输入一个值,他们应该得到肯定的确认(我已经通过输入使用了绿色复选标记),但是,只要状态和zip为空,组验证消息仍应显示。 / p>
在各种尝试中,我遇到了以下问题: - 用户跳过“城市”并显示消息显示的验证,但是当为“zip”提供输入时,验证消息消失。 (这很奇怪......也许是一个错误?) - 用户输入“city”,他们甚至在进入“状态”之前收到组错误消息 - 用户输入“城市”但不会获得复选标记,因为该组中的其他输入为空
我倾向于通过覆盖“onfocusout”事件来解决这个问题(通过在聚焦时检查组中的所有输入)但不确定是否有更好的方法通过一些验证的内置方法
谢谢!
* UPDATE
我提出的解决方案相当丑陋,没有一个能够始终如一地工作,下面是一个例子,它导致我在上面列出的第一个问题的反面。现在,验证消息仅显示填写组中最后一个字段的时间。
也许小组验证依赖于组中最后一次测试的验证结果?
无论如何......到目前为止我已经想到了这个烂摊子:
设置组:
groups : { location : 'city state zip' }
为组创建规则(注意它必须是一个数组以保留顺序):
rules : { location : ['city, 'state', 'zip']}
现在覆盖onfocusout:
onfocusout : function(el) {
var groups = this.groups
, elName = el.name
, elGroup = groups[elName]
, $el = $(el)
if (!this.checkable(el) ){
this.element(el));
}
// If the element belongs to a group, validate all elements in the group
// that come before the current element
if (elGroup) {
var groupMembers = this.settings.rules[elGroup];
for (var i=0; i<groupMembers.length; i++) {
if ( groupMembers[i] === elName ) {
break;
}
this.element( $('[name="' + groupMembers[i] + '"]') );
}
}
}
答案 0 :(得分:0)
你可以使用组,举个例子:
$("form").validate({
rules: {
City: { required: true },
Zip: { required: true },
State: { required: true }
},
groups: {
Location: "City Zip State"
},
errorPlacement: function(error, element) {
if (element.attr("name") == "City" || element.attr("name") == "Zip" || element.attr("name") == "State")
error.insertAfter("#State");
else
error.insertAfter(element);
}
});
答案 1 :(得分:0)
这个插件的“群组”功能似乎还有一些尚未解决的问题,其中一些问题与您的问题有关。
https://github.com/jzaefferer/jquery-validation/issues/search?q=groups