为什么jQuery.validator.unobtrusive.adapters.addBool无法按预期工作?

问题描述

我已经建立了一个客户端自定义验证规则,该规则可使用非侵入式验证工作,如下所示。

$(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"
        }
    });