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,但可以工作。