Asp.net mvc 仅在blur上进行ASP.NET远程验证?
我在MVC 3中使用远程验证,但似乎在我键入内容的任何时候都会触发,如果这是该字段第二次处于活动状态的话。问题是我有一个自动完成框,所以他们可能会点击一个结果来填充该字段,MVC将其视为“离开”Asp.net mvc 仅在blur上进行ASP.NET远程验证?,asp.net-mvc,asp.net-mvc-3,Asp.net Mvc,Asp.net Mvc 3,我在MVC 3中使用远程验证,但似乎在我键入内容的任何时候都会触发,如果这是该字段第二次处于活动状态的话。问题是我有一个自动完成框,所以他们可能会点击一个结果来填充该字段,MVC将其视为“离开” 即使除了完整的东西,我也不想在他们写到一半的时候尝试验证。是否有一种方法可以说“在完成输入后n毫秒内仅运行验证”或“仅在模糊上运行验证?”MVC 3依赖jQuery验证插件进行客户端验证。您需要将插件配置为在密钥更新时不进行验证 您可以使用 $.validator.setDefaults({ on
即使除了完整的东西,我也不想在他们写到一半的时候尝试验证。是否有一种方法可以说“在完成输入后n毫秒内仅运行验证”或“仅在模糊上运行验证?”MVC 3依赖jQuery验证插件进行客户端验证。您需要将插件配置为在密钥更新时不进行验证 您可以使用
$.validator.setDefaults({
onkeyup: false
})
请参阅和此处的onkeyup选项。为了将来的参考,我发现可以将其与typeWatch插件结合使用(http://archive.plugins.jquery.com/project/TypeWatch) 基本上,你想做的是(在我的例子中是一个鼻涕虫): 如果您使用的是vanilla typeWatch插件,则必须为每个元素设置一个typeWatch,因为typeWatch回调不允许您通过$(this)访问当前元素,它只传递值
或者,您可以修改typeWatch插件以传入元素(timer.el),然后您可以对所有元素应用延迟。当自动完成建议列表弹出时,我们遇到了同样的问题,即聚焦自动完成文本框“DealingWithContactName”。在这里,我们选择用户单击的动态生成的自动完成列表项,并将焦点设置为它。50毫秒后,我们从文本框中取出焦点。它解决了我们的问题
$('body').on('click', 'ul.ui-autocomplete li a', function () {
$('#DealingWithContactName').focus();
window.setInterval(function () {
$('#DealingWithContactName').blur();
}, 50);
});
出于某种原因(可能是因为与不引人注目的插件冲突),Hwichers的答案对我来说并不适用。相反,我必须使用.data('validator')
(如上所述)获取表单的验证器,并将onkeyup
设置为false
var validator = $('#form').data('validator');
validator.settings.onkeyup = false;
这是唯一对我有效的方法。jQuery验证似乎不尊重onkeyup和onfocusout元素,尽管这在文档中似乎是可行的。将这些设置为false、“false”、“false”或返回false的函数对我没有任何帮助。如上所述切换表单级别设置(不使用typewatch)是有效的。我在my.js的$(document).ready()部分中添加了该设置,每次按键后仍在验证。
var validator = $('#form').data('validator');
validator.settings.onkeyup = false;