使用jQuery验证具有通用规则的表单

时间:2011-12-07 16:28:02

标签: javascript jquery html jquery-validate validation

我有多个表单,所有表单都共享公共字段(例如email),每个表单都有唯一字段(例如,表单A上的uniqueFieldAuniqueFieldB在表格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)?

1 个答案:

答案 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)
});

如果公共规则与特定于表单的规则之间存在任何重叠,则可能需要执行递归合并(“深度扩展”)。