jquery验证器插件 - 动态更改验证规则

时间:2013-07-11 16:21:16

标签: jquery jquery-validate

以下是我正在使用的代码:

$('#button').click( function (e) {
  var rules = rules_data; //object that holds all rules for form validation

  if (a == b) { //some random criteria 
    delete object.rule5; //deletes specific rule (in this case 'rule5') out of object if criteria is met, otherwise the rules object is unchanged  
  }

  var validate_form = $('#form').validate(rules);

  if (validate_form === false) {
    e.preventDefault();
  }
});

我对这段代码的问题 - 即使规则对象在每次点击按钮时都会发生变化(如果满足条件),验证只会接受第一次点击的规则,即使规则被更改,也会受到这些规则的限制。我的意思是,如果按钮点击更改规则,我希望验证放弃旧规则并应用新规则,但这不会因某种原因发生。

有什么建议吗?也许我在这里做错了什么?

2 个答案:

答案 0 :(得分:3)

.validate()是在表单上初始化插件的方法。它只能在页面上调用一次,如果你试图再次调用它,无论你传递什么选项,它都什么都不做。

因此,您需要从.validate()处理程序中删除click并将其放在DOM就绪处理程序中。

AFAIK,动态更改规则的唯一方法是使用built-in rules('add') method替换它们。

如果你有一个名为field1的输入规则,最初定义如下......

rules: {
    field1: {
        required: true,
        number: true
    }
}

您只能通过替换它们来更改此字段的规则。像这样使用rules('add') method ......

$('input[name="field1"]').rules('add', {
    required: true,
    number: false,
    minlength: 10
});

如果要使用相同的设置一次定位多个字段,则必须合并jQuery .each()方法。像这样......

$('input').each(function() {
    $(this).rules('add', {
        required: true,
        minlength: 10
    });
});

答案 1 :(得分:0)

根据您的规则设置,您可以将其转过来以另一种方式处理它。有一个或多个jquery变量用于指示规则应该是什么,然后让验证规则自己检查这些变量。 (你也可以使用javascript vars,但必须注意范围界定)。验证插件允许条件应用规则,以及自定义规则,其中接受/拒绝部分基于外部变量。