问题描述
我已经建立了一个客户端自定义验证规则,该规则可使用非侵入式验证工作,如下所示。
$(function () {
$.validator.addMethod('custom',function (value,element,params) {
return (value == 47);
});
var input = $("#myField");
input.rules("add",{
custom: true,messages: {
custom: "The value must be 47"
}
});
});
<input name="myField" id="myField" type="number" value="">
<span class="field-validation-valid text-danger" data-valmsg-replace="true" data-valmsg-for="myField"></span>
但是,我随后尝试通过以下操作来改进代码,以使其真正“不显眼”:
$(function () {
$.validator.addMethod('custom',params) {
return (value == 47);
});
$.validator.unobtrusive.adapters.addBool('custom');
});
<input name="myField" id="myField" type="number" value="" data-val-custom="The value must be 47" data-val="true">
<span class="field-validation-valid text-danger" data-valmsg-replace="true" data-valmsg-for="myField"></span>
但是addBool()方法似乎不起作用,并且不会产生错误。我错过了什么?预先谢谢你。
解决方法
问题是因为addBool()
方法是在jQuery函数中调用的。
$(function()
{
//do stuff
})
将其更改为自调用函数是可行的,大概是因为addBool()
在jQuery.validate.unobtrusive.js
内被称为 before 而不是 after 。
(function()
{
//do stuff
})()
今天早上我实际上遇到了相反的问题,下面的代码段必须在jQuery函数中而不是在自调用函数中才能起作用。
var input = $("#myField");
input.rules("add",{
custom: true,messages: {
custom: "The value must be 47"
}
});