以下是我的应用程序中的表单验证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标记中的属性将解决问题。但我确信我所遵循的当前方法也是正确的。似乎我错过了什么。
对此的任何帮助将不胜感激。
由于
答案 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");