我有多个表单,所有表单都共享公共字段(例如email
),每个表单都有唯一字段(例如,表单A上的uniqueFieldA
和uniqueFieldB
在表格B)上。
我想做什么:为公共字段编写一组验证规则(使用jQuery Validation Plugin),并在多个地方“包含”这些规则(每种形式) ,然后添加该特定表单独有的规则。
这样的事情:
简化的HTML:
<form id="formA">
<input name="email" />
<input name="uniqueFieldA" />
</form>
<form id="formB">
<input name="email" />
<input name="uniqueFieldB" />
</form>
JS:
// Define rules common to all forms
var commonRules = {
email: {
required: true,
email: true
},
}
// Define rules for form A
$("#formA").validate({
rules: {
commonRules, //"include" common rules
uniqueFieldA: "required" //rule unique to this form
}
})
// Define rules for form B
$("#formB").validate({
rules: {
commonRules, //"include" common rules
uniqueFieldB: "required" //rule unique to this form
}
})
什么会实现这一点(假设使用了完整,正确的HTML)?
答案 0 :(得分:4)
由于这不是语法上有效的JavaScript(JSLint可能告诉你),不会,它将无效。
$.extend
是你的朋友。试试这个(未经测试):
// Define rules common to all forms
var commonRules = {
email: {
required: true,
email: true
},
};
// Define rules for form A
$("#formA").validate({
rules: $.extend({
uniqueFieldA: "required"
}, commonRules)
});
// Define rules for form B
$("#formB").validate({
rules: $.extend({
uniqueFieldB: "required"
}, commonRules)
});
如果公共规则与特定于表单的规则之间存在任何重叠,则可能需要执行递归合并(“深度扩展”)。