有没有办法禁用某个验证器(信用卡)的jQuery验证,以便它只发生在onblur而不是onkeyup?
基于jQuery Validator文档,我认为我可以这样做:
$(function () {
$("[data-val-creditcard]").validate({
onkeyup: false
})
});
然而,它似乎没有起作用。
我还尝试在验证器上执行以下操作:
public class CreditCardValidator : DataAnnotationsModelValidator<CreditCardAttribute>
{
string _message;
public CreditCardValidator(ModelMetadata metadata, ControllerContext context, CreditCardAttribute attribute)
: base(metadata, context, attribute)
{
_message = attribute.ErrorMessage;
}
public override IEnumerable<ModelClientValidationRule> GetClientValidationRules()
{
var rule = new ModelClientValidationRule
{
ErrorMessage = _message,
ValidationType = "creditcard"
};
rule.ValidationParameters.Add("onkeyup", false);
return new[] { rule };
}
}
它也不起作用,但我只是在正确使用ValidationParameters。
在表单中输入信用卡号并将其随机从无效更改为有效,然后返回无效,这有点烦人。
有什么想法吗?谢谢!
答案 0 :(得分:20)
好的,
我遇到了同样的问题并找到了这个帖子: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 } );
您会看到您的信用卡字段仅在模糊或提交时进行检查(但其余部分也在使用密钥更新)。
我一直在寻找相同的解决方案,并发现这里的答案可以改进,所以我觉得在这里分享会很好。
答案 1 :(得分:20)
$.validator.setDefaults
不适用于不显眼的验证,因为验证器是在内部初始化的。
要更改使用不显眼验证的表单上的设置,您可以执行以下操作:
var validator = $("form").data("validator");
if (validator) {
validator.settings.onkeyup = false; // disable validation on keyup
}
答案 2 :(得分:9)
我意识到这是一个旧帖子,但没有一个回答似乎回答了这个问题,
如何禁用onkeyup并启用onblur?
我一直在寻找这个,以为我会分享答案。
正如Ben Foster正确地说的那样,可以通过执行以下操作来禁用onkeyup
var validator = $("form").data("validator");
if (validator) {
validator.settings.onkeyup = false;
}
要启用验证onblur,我们可以使用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();
};
}
答案 3 :(得分:5)
不知道如何将其设置为特定字段,但您可以尝试此操作以禁用键盘验证(适用于所有字段):
$.validator.setDefaults({
onkeyup: false
})
见
答案 4 :(得分:1)
你也可以使用上面的内容,
$("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论坛中的This answer给了我很多帮助。
答案 5 :(得分:0)
您可以在信用字段的onfocus事件中将默认值设置为off,然后在onblur中将其设置为off。看似hacky,但可以工作。