我有这个可爱的课程:
validations.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();
}
};
}();
validations.js 与所有javascript代码捆绑在一起并缩小为单个文件。然后,我使用每页脚本只加载所需的代码。在这种情况下:
Validation.init();
但它似乎没有激发验证。我100%确定正在调用Validation.init()
。
只有当我把它带到外面时它才有效:
validations.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;}
});
为什么?
答案 0 :(得分:0)
这是因为您在加载页面后注册了自定义脚本验证程序。一旦不显眼的验证器加载,验证规则就会应用于整个文档,如果到那时你的规则和验证器没有被添加到堆栈中,它们将被忽略。
我相信你可以在添加规则和验证器之后致电$.validator.unobtrusive.parse(document)
,我不是100%确定这会起作用,或者是否会应用验证器两次。
编辑:重新回答
修改:添加了可能的解决方案