jqueryvalidation插件规则有条件吗?

我正在使用Jqueryvalidation插件,我有一个带有“保存”,“提交”按钮的大表单。 我有两套按钮规则。

  1. 每当用户单击保存按钮时,只有有效规则的一组规则(必填字段电子邮件,密码)。
  2. 每当用户单击保存按钮时,只有有效规则的两组规则(所有必填字段)。

任何人都建议,如何发展这样?

Set1规则:

var rulesOne = { email : "required" .......} 

Set2规则:

 var rulesTwo = {city : "required" ..........} $("#form1").validate({ ignore : '*:not([name]),:hidden', rules : rules}); 

如果保存按钮

 if(this.id == "personal_save"){ setOne rules test ? else // submit button (check all validations) { setTwo rules test ? } 

谢谢Prasad

您无法使用此插件动态打开/关闭表单的任何/所有部分的validation。

但是,您可以使用.rules()方法随时动态添加,删除或覆盖规则,从而为您提供类似的行为。

然后,您可以使用.valid()方法来测试表单。

将它们放在专用的click事件处理程序中。

 $(document).ready(function() { // initialize the plugin $("#form1").validate({ ignore : '*:not([name]),:hidden' // no rules; rules are set dynamically below }); // Save Button $('#save_button').on('click', function() { // dynamically set the rules $('input[name="email"]').rules('add', { required: true, .... }); // remove all rules from the other fields $('input[name="city"]').rules('remove'); // force a test of the form $("#form1").valid(); }); // Submit Button $('#submit_button').on('click', function() { // dynamically set the rules $('input[name="city"]').rules('add', { required: true, .... }); // remove all rules from the other fields $('input[name="email"]').rules('remove'); // force a test of the form $("#form1").valid(); }); }); 

概念certificateDEMO: http : //jsfiddle.net/x6YWM/


如果你有很多字段,你可以通过在它们上设置适当的类来.ruleset1它,如.ruleset1.ruleset2 。 然后,您可以使用.rules()方法将它们作为一个组进行.rules() 。 请记住,如果选择器针对多个元素,则需要将它们包含在jQuery .each()

 $('.ruleset1').each(function() { // target multiple elements $(this).rules('add', { // apply the rules to each required: true, .... }); }); 

我遇到了同样的问题,经过大量研究后我找到了解决方案。 它包括使用JQuery.extend替换validation器设置中的rules属性。 我创建了一个基于@Sparky的jsfiddle。 http://jsfiddle.net/rWsLy/

  $('#save_button').on('click', function () { var settings = $("#form1").validate().settings; // Modify validation settings $.extend(settings, { rules: { field1: { required: true, }, }, }); // force a test of the form $("#form1").valid(); }); 

我更喜欢这种方式,因为规则的指定方式与validate方法相同。 我认为,以前的解决方案不会扩展。