JQuery验证规则不会动态更改

时间:2017-04-28 09:08:02

标签: jquery jquery-validate

我正在尝试动态更改字段的规则(和消息)。它似乎有效但我定义的第一个规则是即使重新定义它们也适用的规则。 我尝试了“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);
}

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

1 个答案:

答案 0 :(得分:0)

找到解决方案:

validator.destroy();

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

另一种方法是使用规则('删除')规则('添加',规则)。在这种情况下,我们应该只在脚本开始时调用 validate()一次。