我正在编写一个利用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"
});
任何想法?我处于一个相当紧迫的期限,我开始恐慌。
答案 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
将告诉验证者不要验证隐藏字段)。不确定你是否以这种方式使用它。