【问题标题】:jQuery validator addmethod won't display appropriate error messagesjQuery 验证器 addmethod 不会显示适当的错误消息
【发布时间】:2013-01-18 00:55:09
【问题描述】:

我使用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
        });
    }
});

我有一个带有 id validation_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 链接。

【问题讨论】:

  • 你能构建一个 jsFiddle 演示吗?
  • 我在上面添加了一个 jsFiddle 演示。
  • 如何使用演示?换句话说,我应该在应该触发自定义消息的电子邮件字段中输入什么?
  • 如果您要输入任何有效的电子邮件,例如 test@test.com,那么它仍然会一直说“电子邮件字段是必需的”,即使它失败的测试是“uniqueemail”。
  • 我明白了。我如何知道您的 .validate() 规则的格式和声明是否正确? validationJSON.rulesvalidationJSON.messages 的确切结果是什么?

标签: jquery error-handling jquery-validate


【解决方案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 演示,以更清楚地显示您遇到的问题。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-01-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-07-07
    相关资源
    最近更新 更多