Asp.net mvc 仅在blur上进行ASP.NET远程验证?

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

我在MVC 3中使用远程验证,但似乎在我键入内容的任何时候都会触发,如果这是该字段第二次处于活动状态的话。问题是我有一个自动完成框,所以他们可能会点击一个结果来填充该字段,MVC将其视为“离开”


即使除了完整的东西,我也不想在他们写到一半的时候尝试验证。是否有一种方法可以说“在完成输入后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;