我使用MVC DataAnnotations和jQuery unobtrusive javascript库编写了一个自定义验证器。它工作得很好。我现在唯一的问题是,在初始验证之后,如果用户编辑了该字段,则它会在每次击键时触发验证器。由于验证器访问Web服务以验证输入,我宁愿它只是在用户离开字段或提交表单时验证输入。有没有办法改变这种行为?这是我的代码:
<script type="text/javascript">
$.validator.addMethod("validate_zipcode", function (value, element) {
if (value == null || value.length == 0) {
return true;
}
var isValid = false;
$.ajax({
async: false,
dataType: "json",
url: "/api/iszipvalid/" + value,
success: function (response) {
isValid = response;
}
});
return isValid;
});
$.validator.unobtrusive.adapters.addBool('zipcode', 'validate_zipcode');
</script>
答案 0 :(得分:10)
我不是肯定的这将与ASP.NET MVC结合使用(稍后我将启动测试项目),但验证允许您set defaults用于所有实例像这样验证:
$.validator.setDefaults({ onkeyup: false });
如果你可以在MVC获得validate
上的句柄之前添加该行,它可能会有效,但它会对所有表单中的所有字段禁用onkeyup
(根据你的帖子判断,看起来像这样没关系。)
希望有所帮助。
答案 1 :(得分:3)
您可以在开始新请求之前取消ajax请求。您的代码可能类似于:
<script type="text/javascript">
var request = null;
$.validator.addMethod("validate_zipcode", function (value, element) {
if (value == null || value.length == 0) {
return true;
}
if (request != null) {
request.abort();
}
var isValid = false;
request = $.ajax({
async: false,
dataType: "json",
url: "/api/iszipvalid/" + value,
success: function (response) {
isValid = response;
}
});
return isValid;
});
$.validator.unobtrusive.adapters.addBool('zipcode', 'validate_zipcode');
</script>
如果您查看使用firebug进行的调用,这就是jquery UI自动完成功能。