jQuery的验证插件(jquery.validate.js)支持方法addClassRules使用()。这让我做这样的事情:jQuery验证插件指定化合物规则验证规则参数
$.validator.addClassRules({
birthdate: {
date: true,
notFuture: true,
notBefore1900: true
}
});
其中notFuture和notBefore1900是我以前用的呼叫指定.addMethod()的方法。
这使我可以通过指定类<input class="birthdate" name="foo" />
来使用它,它的验证很好,根据触发无效状态的特定方法显示相应的验证错误消息。
我的问题是我怎么做这样的复合规则,并且指定其中作为规则的参数传递给validate()方法的一部分?我希望能够做到这一点:
$('#myForm').validate({
rules: {
foo: 'birthdate'
}
});
可悲的是,同时验证方法本身可以表示无论是作为类名或明确的规则的参数,像
rules: {
foo: 'date'
}
一个不能做与类相同规则;它期望的规则参数以验证()是一个方法,而不是一个类的规则。
我可以这样做:
var reusableRule = {
date: true,
notFuture: true,
notBefore1900: true
};
...
$('#myForm').validate({
rules: {
foo: reusableRule
}
});
,但我宁愿保持包含插件本身内的事情,而不是入侵全球范围内。我可以做这样的事情
$.validator.customRules = {
birthdate: {
date: true,
...
}
}
但随后却看起来很难看(或至少不符合的其他规则项目的语法):
$('#myForm').validate({
rules: {
foo: $.validator.customRules.birthdate
}
});
另外,我跑的风险后来插件指定像customRules
这将导致冲突的版本。
现在,我想我会继续他们在全球范围内,但如果任何人有一个更清洁的方式(或者,如果有一个“正确的方式”,我在解析文档时没有),请分享。谢谢:)
我认为'customRules'的解决方案是最好的选择。我之前在系统中已经看到过这种情况,到目前为止,它在最近的版本更改中运行良好。 – Robb
是啊......我只是讨厌'污染全球命名空间',如果它可以避免。如果插件本身支持某种方法传入一个字符串和一个对象来处理它,它可以很好,它可以在内部检查这些方法以及定义的方法。乐叹。 – jinglesthula
有很多方法可以用这个插件来定义和声明规则......而且你似乎已经尝试了其中的大部分。 – Sparky