JQuery 验证规则不会动态更改

JQuery Validation rules don't change dynamicaly

我正在尝试动态更改字段的规则(和消息)。它似乎有效,但我定义的第一条规则即使在我重新定义它们时也适用。 我尝试了方法"resetForm()"没有成功,也尝试添加类似问题的一些答案之类的规则

$('input[name="textmsg"]').rules('add', rules);

但它抛出实习生 validate.js 错误。


我的代码工作如下:

var validationRules = {
    defaultField: { required: true },
    name: { required: true, minlength: 5, maxlength: 50 },
    birthDate: { required: true, date: true },
    phoneNumber: { required: true, maxlength: 20, digits: true }
};

[...]

$("#chatbox-form").submit(function(event)
{
    var valid = validateField(questionsInOrder[currentQuestion]);

    if (valid) {
        currentQuestion++;
    }
    askQuestion();
}

[...]

function validateField (question)
{
    var form = $("#chatbox-form");

    var rules = validationRules[question];
    if (typeof rules === "undefined") {
        rules = validationRules.defaultField;
    }

    var messages = validationMessages[question];
    if (typeof messages === "undefined") {
        messages = validationMessages.defaultField;
    }

    var validator = form.validate({
        rules: {
          textmsg: rules
        },
        messages: {
          textmsg: messages
        },
        errorPlacement: function(error, element) {
            return true;
        },
        showErrors: function(errorMap, errorList) {
            if ((Object.keys(errorList).length) > 0) {
                errorMessage = errorList[0].message;
            }
        }
    });

    var valid = form.valid();

    validator.resetForm();

    return(valid);
}

每次我提交无效回复时,它都会再次询问,当回复有效时,它会询问下一个问题。但是验证总是应用第一组规则,它不会刷新它们(字段 'rules' 和 'messages' 正在正确更改)。

找到解决方案:

validator.destroy();

这会破坏实例(因为 validate() 是插件的初始化)。 Validator.destroy().


另一种方法是使用 rules('remove')rules('add', rules)。在这种情况下,我们应该只在脚本开始时调用一次 validate()