使用jQuery验证临时禁用规则

使用jQuery验证临时禁用规则,jquery,jquery-validate,Jquery,Jquery Validate,我的表单有几个相当复杂的验证规则,我有必要暂时禁用一个给定的规则,以后再启用它。删除后再添加似乎没有意义,因此我需要一个工具来禁用和启用验证规则。从版本1.8.1的jquery.validate.js开始,我在“rules”函数中添加了两个case语句,以便命令切换语句如下所示 switch(command) { case "add": $.extend(existingRules, $.validator.normalizeRule(argument)); staticRule

我的表单有几个相当复杂的验证规则,我有必要暂时禁用一个给定的规则,以后再启用它。删除后再添加似乎没有意义,因此我需要一个工具来禁用和启用验证规则。

从版本1.8.1的jquery.validate.js开始,我在“rules”函数中添加了两个case语句,以便命令切换语句如下所示

switch(command) {
case "add":
    $.extend(existingRules, $.validator.normalizeRule(argument));
    staticRules[element.name] = existingRules;
    if (argument.messages)
        settings.messages[element.name] = $.extend( settings.messages[element.name], argument.messages );
    break;
case "remove":
    if (!argument) {
        delete staticRules[element.name];
        return existingRules;
    }
    var filtered = {};
    $.each(argument.split(/\s/), function(index, method) {
        filtered[method] = existingRules[method];
        delete existingRules[method];
    });
    return filtered;
case "disable":
    if (!argument) {
        return false;
    }
    $.each(argument.split(/\s/), function(index, method) {
        existingRules[method].disabled=true;
    });
    break;
case "enable":
    if (!argument) {
        return false;
    }
    $.each(argument.split(/\s/), function(index, method) {
        existingRules[method].disabled=false;
    });
    break;
}
然后为了实现这一点,我们在“check”函数中添加了一个条件来检查我们设置的这个禁用参数的状态。值得注意的是,如果该规则从未被禁用/启用,那么该值将是未定义的,我们在此假设,如果它未定义,我们对该规则感到满意。此函数的循环语句现在以以下内容开头:

for (var method in rules ) {
    var rule = { method: method, parameters: rules[method] };
    try {
        if (typeof rule.parameters["disabled"] === 'undefined' || rule.parameters["disabled"] == false)
        {
            var result = $.validator.methods[method].call( this, element.value.replace(/\r/g, ""), element, rule.parameters );
        } else {
            continue;
        }
像使用“添加”和“删除”功能一样使用此功能,例如:

$('#email_address').rules("disable", "remote");
$('#email_address').rules("enable", "remote");

我希望这有助于其他人,我一直在努力达到这一目的。

你应该将问题中的答案部分作为实际答案发布:在v1.16或更早版本中,“禁用”和“启用”不是选项anymore@JeroenK,在我写这篇文章时,它们是不可用的选项,我在这两个开关案例中添加了启用/禁用选项。