0

我正在使用jQuery 验证插件来验证我的表单,并且我还使用该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
        });
    }
});

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

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

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

更新:

这是一个显示问题的jsFiddle链接。

4

1 回答 1

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按预期工作。

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

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

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

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

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

于 2013-02-03T00:47:54.493 回答