1

这是我正在使用的代码:

$('#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();
  }
});

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

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

4

2 回答 2

3

.validate()是在表单上初始化插件的方法。它只能在页面上调用一次,如果您再次尝试调用它,无论您通过什么选项,它都不会执行任何操作。

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

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

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

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

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

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

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

$('input').each(function() {
    $(this).rules('add', {
        required: true,
        minlength: 10
    });
});
于 2013-07-11T20:01:19.980 回答
0

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

于 2013-07-11T19:50:57.037 回答