以下是我正在使用的代码:
$('#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();
}
});
我对这段代码的问题 - 即使规则对象在每次点击按钮时都会发生变化(如果满足条件),验证只会接受第一次点击的规则,即使规则被更改,也会受到这些规则的限制。我的意思是,如果按钮点击更改规则,我希望验证放弃旧规则并应用新规则,但这不会因某种原因发生。
有什么建议吗?也许我在这里做错了什么?
答案 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,但必须注意范围界定)。验证插件允许条件应用规则,以及自定义规则,其中接受/拒绝部分基于外部变量。