JQuery 验证自定义错误消息未显示

尼曼

以下是我的应用程序中的表单验证 javascript:

$('#EmploymentHistoryForm').validate({
ignore: ':hidden, [readonly=readonly]',
rules: {
    'MemberJob.Phone': {
        PhoneFieldValidation: true
    }
},
messages: {
    'MemberJob.Phone': {
        PhoneFieldValidation: $.viewUrl.url.invaliedPhoneMessage
    }
},
showErrors: function (errorMap, errorList) {
    ShowErrors(errorMap, errorList, this.validElements());
},
submitHandler: function (form, event) {
    event.preventDefault();
    return false;
}
});

在这里,$.viewUrl.url.invaliedPhoneMessage 设置在 cshtml 页面(在 ASP.NET MVC 中),并且在调试 javascript 时,当 $('...').validate 函数被命中时,我可以在该变量中看到正确的值.

我在 JQuery 验证器集合中注册了一个新的验证器“PhoneFieldValidation”:

$.validator.addMethod("PhoneFieldValidation", ValidatePhoneAndAltPhone);

以下是为我添加了此验证规则的输入控件呈现的 HTML:

<input class="PhoneFieldValidation" id="MemberJob_Phone" name="MemberJob.Phone" type="text" required="required" aria-required="true">

我可以看到验证被正确触发。这意味着,“ValidatePhoneAndAltPhone”方法被调用,并根据输入返回一个布尔结果。

但是,错误消息没有正确显示。它显示“警告:没有为 MemberJob.Phone 定义消息”而不是“无效的电话号码”。

通过 jquery.validate.js 的 customMessage 函数进行调试时,我可以看到“this.settings.messages”集合没有“MemberJob.Phone”字段的消息,这看起来是此问题的根本原因。

知道如何解决这个问题吗?

我知道我们可以在 HTML 标签中添加“data-msg-[rulename]”属性来解决这个问题。但我确信我目前遵循的方法也是正确的。似乎我错过了一些东西。

对此的任何帮助将不胜感激。

谢谢

活泼的

你从来没有提到$.viewUrl.url.invaliedPhoneMessage从哪里来。

如果您的自定义PhoneFieldValidation方法中已经定义了一条消息,那么您就不会在该messages对象中定义一条消息

否则,您不能在messages没有函数的情况下对象中使用 JavaScript 变量

整个问题是由自动构建.validate()方法调用的 Unobtrusive 插件引起的您不能.validate()在同一个上多次调用form并且所有后续调用都将被忽略。相反,您可以简单地PhoneFieldValidation在其.addMethod()方法中定义自定义消息

$.validator.addMethod("PhoneFieldValidation", function(value, element) {
    // your custom method function here;
}, "This is your custom validation error message");

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章