jQuery验证:组验证但不是字段验证

时间:2011-10-02 21:57:10

标签: javascript jquery forms validation plugins

我正在使用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] + '"]') );
            }
        }
    }

2 个答案:

答案 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);
   }
});
  • 规则将3个字段设置为true
  • 这些组定义它们作为一个组进行验证
  • 并且errorPlacement函数定义了错误消息的放置位置

答案 1 :(得分:0)

这个插件的“群组”功能似乎还有一些尚未解决的问题,其中一些问题与您的问题有关。

https://github.com/jzaefferer/jquery-validation/issues/search?q=groups