ASP.net MVC 3 jQueryvalidation; 禁用Unobtrusive OnKeyUp?

有没有办法禁用某个validation器(信用卡)的jQueryvalidation,以便它只发生在onblur而不是onkeyup?

根据jQuery Validator文档,我认为我可以这样做:

$(function () { $("[data-val-creditcard]").validate({ onkeyup: false }) }); 

但是,它似乎没有起作用。

我还尝试在我的validation器上执行以下操作:

 public class CreditCardValidator : DataAnnotationsModelValidator { string _message; public CreditCardValidator(ModelMetadata metadata, ControllerContext context, CreditCardAttribute attribute) : base(metadata, context, attribute) { _message = attribute.ErrorMessage; } public override IEnumerable GetClientValidationRules() { var rule = new ModelClientValidationRule { ErrorMessage = _message, ValidationType = "creditcard" }; rule.ValidationParameters.Add("onkeyup", false); return new[] { rule }; } } 

它也不起作用,但我只是在适当使用ValidationParameters。

在表单中输入信用卡号并将其随机从无效更改为有效,然后返回无效,这有点烦人。

有任何想法吗? 谢谢!

好,朋友们,

我遇到了同样的问题并找到了这个post: http : //old.nabble.com/-validate–onkeyup-for-single-field-td21729097s27240.html

这个想法基本上是覆盖keyup事件并返回false。 因此,在您的具体情况下,您需要添加:

 $('#my-form').validate({ rules: { [...] } } // Disable keyup validation for credit card field $("[data-val-creditcard]").keyup(function() { return false } ); 

并且您将看到您的信用卡字段仅在模糊或提交时进行检查(但其余部分也在处理密钥更新)。

我正在寻找相同的解决方案,并发现这里的答案可以改进,所以我认为在这里分享它会很好。

由于validation器在内部初始化, $.validator.setDefaults不适用于不显眼的validation。

要更改使用不显眼validation的表单上的设置,您可以执行以下操作:

 var validator = $("form").data("validator"); if (validator) { validator.settings.onkeyup = false; // disable validation on keyup } 

我意识到这是一个老post,但没有一个回答似乎回答了这个问题,

如何禁用onkeyup并启用onblur?

我一直在寻找这个,以为我会分享答案。

正如Ben Foster正确地说的那样,可以通过执行以下操作来禁用onkeyup

 var validator = $("form").data("validator"); if (validator) { validator.settings.onkeyup = false; } 

要启用validationonblur,我们可以使用onfocusout

 validator.settings.onfocusout = function(element) { $(element).valid(); }; 

所以我们禁用onkeyup和启用onblur的代码看起来像这样

 var validator = $("form").data("validator"); if (validator) { validator.settings.onkeyup = false; validator.settings.onfocusout = function(element) { $(element).valid(); }; } 

不知道如何将其设置为特定字段,但您可以尝试此操作以禁用键盘validation(对于所有字段):

 $.validator.setDefaults({ onkeyup: false }) 

看到

  • MVC 3指定远程validation的validation触发器
  • 仅在模糊时ASP.NET远程validation?

你也可以使用类似上面的东西,

 $("form").validate({ onfocusout: false, onkeyup: false }); 

如果你有自定义规则,那么,

 $("form").validate({ onfocusout: false, onkeyup: false, rules: { "name1": { required: true, email: true, maxlength: 100 }, "name2": { required: true, number: true } } }); 

jQuery论坛中的这个答案对我帮助很大。

您可以在信用字段的onfocus事件中将默认值设置为off,然后在onblur中将它们设置为off。 看似hacky,但可以工作。