要覆盖查询验证插件,请在plaugsin document中推荐使用:
$(".selector").validate({
invalidHandler: function(form, validator) {
var errors = validator.numberOfInvalids();
if (errors) {
var message = errors == 1
? 'You missed 1 field. It has been highlighted'
: 'You missed ' + errors + ' fields. They have been highlighted';
$("div.error span").html(message);
$("div.error").show();
} else {
$("div.error").hide();
}
}
})
但是,它在使用jquery-1.7.1.js的MVC4中不起作用。似乎jquery.validate.unobtrusive.js阻止调用覆盖句柄。如果不包含此文件,则调用覆盖句柄并显示消息。有人有同样的问题吗?
答案 0 :(得分:3)
我终于按照Bruce的建议让它工作了。诀窍是在连接自定义程序之前删除旧处理程序。您可以以相同的方式覆盖其他设置。 Microsoft应该加快修复其jquery.validate.unobtrusive.js以使用jquery.validate。据报道unobtrusive [version="2.0.20710.0"] breaks jquery-1.9.0。
$('form').each(function() {
$(this).unbind("invalid-form.validate"); // remove old handler!!!!
$(this).bind("invalid-form.validate", function(e, validator) {
//alert("ok");
var errors = validator.numberOfInvalids();
if (errors) {
var message = errors == 1
? 'You missed 1 field. It has been highlighted'
: 'You missed ' + errors + ' fields. They have been highlighted';
$("div.error span").html(message);
$("div.error").show();
} else {
$("div.error").hide();
}
});
});
答案 1 :(得分:1)
这不起作用的原因是验证器已经由不显眼的插件创建,所以当你打电话时
$(".selector").validate({..})
您只需返回已创建的验证程序实例,并且不会应用您的选项。不过我认为你可以这样改变设置。
<script>
$(function () {
// get the validator instance
var v = $('form').validate();
// overwrite the invalidHandler with your own function
v.settings.invalidHandler = function(form, validator) {
// your stuff here
};
});
</script>
请注意,这会覆盖“不引人注目的”字样。 invalidHandler函数,所以你不会得到那些不引人注意的部分&#39;功能。