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

时间:2017-08-30 10:29:34

标签: javascript jquery asp.net-mvc jquery-validate unobtrusive-validation

以下是我的应用程序中的表单验证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时,我可以看到该变量中的正确值$(' ...& #39;)。验证功能被击中。

我已经注册了一个新的验证器" PhoneFieldValidation"在JQuery验证器集合中:

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

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

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

我可以看到验证被正确解雇了。这意味着,&#34; ValidatePhoneAndAltPhone&#34;调用方法,并根据输入返回布尔结果。

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

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

如何解决此问题?

我知道我们可以添加&#34; data-msg- [rulename]&#34; HTML标记中的属性将解决问题。但我确信我所遵循的当前方法也是正确的。似乎我错过了什么。

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

由于

1 个答案:

答案 0 :(得分:2)

您从未提及$.viewUrl.url.invaliedPhoneMessage的来源。

如果您的自定义PhoneFieldValidation方法中已定义了消息,则您不会在messages对象中定义消息。

否则,如果没有函数,则无法在messages对象中使用JavaScript变量。

整个问题是由Unobtrusive插件引起的,该插件自动构建.validate()方法调用。您无法在同一.validate()上多次致电form;并忽略所有后续调用。相反,您只需在PhoneFieldValidation方法中为.addMethod()定义自定义消息。

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