jQuery验证器addmethod将不会显示相应的错误消息

时间:2013-02-02 23:51:53

标签: jquery error-handling jquery-validate

我正在使用jQuery validation plugin来验证我的表单,我也使用addmethod函数来创建自己的验证方法。这就是我设置jQuery Validator的方法:

$(document).ready(function() {
    if ($("#validation_json").length > 0) {
        var validationJSON = JSON.parse(decodeURIComponent($("#validation_json").val()));
        $(".form-horizontal").validate({
            rules: validationJSON.rules,
            messages: validationJSON.messages
        });
    }
});

我输入了带有valid_json的标签,并将值设置为jQuery验证器插件的一组规则和消息;在表单构建器的帮助下,这些规则和消息在服务器端输出。唯一的问题是每当我添加自己的验证方法时,就像这样:

jQuery.validator.addMethod("uniqueemail", function(email) {
    return false; //just for testing
}, "This email is already in use");

jQuery验证器将在提交字段之前使用此方法来检查它是否有效(此外还有上面设置的规则),但是如果其中一个addMethod验证为false,它将使用该消息对于上面在validate方法中设置的项目,而不是传递给addMethod的消息。有没有人知道我可以让它显示实际传递给addMethod函数的消息?谢谢!

更新:

这是显示问题的jsFiddle链接。

1 个答案:

答案 0 :(得分:1)

你如何设置它有一个问题...

$(document).ready(function() {
    if ($("#validation_json").length > 0) {
        var validationJSON = JSON.parse(decodeURIComponent($("#validation_json").val()));
        $(".form-horizontal").validate({
            rules: validationJSON.rules,
            messages: validationJSON.messages
        });
    }
});

.validate()用于在DOM准备好初始化插件一次。您已将其置于条件语句中,因此如果满足if条件,则插件仅在表单上初始化。验证将无法在其他所有时间初始化。使用.valid()触发验证测试,而不是重新初始化插件...

$(document).ready(function() {

    $(".form-horizontal").validate({
        rules: validationJSON.rules,
        messages: validationJSON.messages,
        // any other options
    });

    if ($("#validation_json").length > 0) {
        var validationJSON = JSON.parse(decodeURIComponent($("#validation_json").val()));
        $(".form-horizontal").valid();  // trigger a validation test
    }

    jQuery.validator.addMethod("uniqueemail", function(email) {
        return false; //just for testing
    }, "This email is already in use");

});

基本演示: http://jsfiddle.net/AYvmg/

该演示显示来自addMethod的自定义消息正在按预期工作。

然后,可以使用.rules('add')方法动态更改自定义消息,而无需再调用.validate()

$('#yourfield').rules('add', {
    messages: {
        uniqueemail: "this is a new message"
    }
});

另一项基本演示: http://jsfiddle.net/5RnLM/

这第二个演示就像第一个演示一样。然后,当您单击#test按钮时,规则的消息将更改为其他内容。您可以使用此.rules('add')方法在需要时以及从任何其他功能更改自定义消息。

否则,也许您可​​以显示关联的HTML并构建一个jsFiddle演示,以更清楚地显示您遇到的问题。