为什么在对象方法中调用AddMethod时未触发jQuery验证



我有这个可爱的类:

验证.js

var Validation = function () {
    var load= function () {
        $.validator.addMethod("noweirdstuff", function (value, element) {
            return !(/W/.test(value));}, "Username has invalid characters. Only letters, numbres & underscores allowed.");
        $.validator.unobtrusive.adapters.add("noweirdstuff", function (options) {
            options.rules["noweirdstuff"] = true;
            if (options.message) { options.messages["noweirdstuff"] = options.message;}
        });   
    }
    return {
        init: function () {
            load();
        }
    };
}();

验证.js 被捆绑在一起,并将所有JavaScript代码捆绑到单个文件中。然后,我正在使用每个页脚本来加载所需的代码。在这种情况下:

Validation.init(); 

,但似乎并没有解雇验证。我100%确定Validation.init()被称为。

它仅在我将其带到外面时起作用:

验证.js

 var Validation = function () {
        var load = function () {  
         // goodbye adding validation         
        }
        return {
            init: function () {
                load();
            }
        };
 }();
 $.validator.addMethod("noweirdstuff", function (value, element) {
                        return !(/W/.test(value));}, "Username has invalid characters. Only letters, numbres & underscores allowed.");
 $.validator.unobtrusive.adapters.add("noweirdstuff", function (options) {
                        options.rules["noweirdstuff"] = true;
                        if (options.message) { options.messages["noweirdstuff"] = options.message;}
                    });

为什么?

这是因为您正在加载页面后注册自定义脚本验证器。验证规则一旦不引人注目的验证器加载,就会将验证规则应用于整个文档,如果您的规则和验证器尚未添加到堆栈中,将忽略它们。

我相信您可以在添加规则和验证器后致电$.validator.unobtrusive.parse(document),我不能100%确定这会起作用,或者是否会申请验证器两次。

编辑:改写答案

编辑:添加了可能的解决方案

最新更新