我有这个可爱的类:
验证.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%确定这会起作用,或者是否会申请验证器两次。
编辑:改写答案
编辑:添加了可能的解决方案