我正在使用jquery验证并设置了组。但是,我很难找出从包含的各个字段分别验证每个组的最佳方式。jQuery验证:组验证,但不是字段验证
为了说明这一点:
我有城市,州和邮编(按顺序)。如果有人输入了zip的值,他们应该得到肯定的确认(我已经得到了该部分使用输入的绿色复选标记),但是,只要状态和zip为空,组验证消息仍应显示。
在进行各种尝试时,我遇到了以下问题: - 用户跳过“城市”并验证消息显示,但当为“zip”提供输入时,验证消息消失。 (这很奇怪...也许是一个错误?) - 用户输入“城市”,他们甚至在进入“状态”之前就会收到组错误消息 - 用户输入“城市”,但不会得到复选标记,因为该组中的其他输入为空
我倾向于通过覆盖“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] + '"]'));
}
}
}
是的...我认为你是没错,但我会坚持一段时间,以防某人有合理的即时解决方案。了解我现在知道的关于jquery验证对团队支持的知识我可能会采取一种非常不同的方法:/ – uglymunky
为什么不把团队出去?只需添加自己的逻辑来检查分组项目的排列。这听起来像你已经有点这样做,无论如何与你的绿色复选标记。 – Terry
团体将不得不留在现在作为权宜之计......但是,如果没有其他解决方案出现,我将不得不按照你的建议去做,然后回到这个实施所有群组/消息的东西上我自己...这可能是最好的解决方案,但它也会相当耗时 – uglymunky