jquery验证。自定义规则使用选择器语法

时间:2011-10-26 10:20:33

标签: jquery jquery-plugins jquery-validate

我正在编写一个利用jQuery Validation的系统,该系统通过jSON引入自定义规则,消息并在单个页面中动态验证多个表单。一切都在游泳,除了我找不到任何关于自定义规则的正确语法的正确信息....

例如:

我知道这有用......

"ui_txt_GCPostcode": {
    "required": "input[name=ui_rb_ItemAddress][value=Recipient]:checked"
}

我在这里说,仅当选中名称为ui_txt_GCPostcode且值为ui_rb_ItemAddress的列表中的单选按钮时才需要Recipient

这对我来说看起来我可以根据包含特定选择器属性的dependency expressions分配规则。

然而这不起作用.....

"ui_sel_PCSelect": {
        "required": "input[name=ui_txt_PostCodeSearch]:hidden, input[name=ui_txt_Address]:hidden"
    }

即使我ui_txt_Address可见,验证工具也会被解雇。

我甚至设置了ignore隐藏属性的验证器,例如。

                // Validate the form once the defaults are set.
                $validator = $form.validate({
                    // This prevents validation from running on every
                    // form submission by default.
                    onsubmit: false,
                    messages: messages,
                    rules: rules,
                    errorContainer: $container,
                    errorLabelContainer: $("ol", $container),
                    wrapper: "li",

                    // Ignore hidden items. Why is this not working??
                    ignore: ":hidden"
                });

任何想法?我处于一个相当紧迫的期限,我开始恐慌。

1 个答案:

答案 0 :(得分:1)

这个选择器:

"input[name=ui_txt_PostCodeSearch]:hidden, input[name=ui_txt_Address]:hidden"

如果第一个第二部分为真,则会触发required规则(请参阅multiple selector)。这就是为什么即使可以看到规则也会触发规则。

如果你想隐藏两个所需的元素,你可能需要提供一个依赖函数而不是一个表达式:

"ui_txt_GCPostcode": {
    "required": function() {
        return $("input[name='ui_rb_ItemAddress'][value='Recipient']:checked").length &&
            $("input[name='ui_rb_ItemAddress'][value='Recipient']:checked").length;
    }
}

至于ignore属性不起作用,那就是忽略与选择器匹配的字段(因此:hidden将告诉验证者不要验证隐藏字段)。不确定你是否以这种方式使用它。