ASP.net MVC 3 jQuery验证;禁用Unobtrusive OnKeyUp?

时间:2011-11-05 19:28:44

标签: jquery asp.net-mvc asp.net-mvc-3 jquery-validate

有没有办法禁用某个验证器(信用卡)的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。

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

有什么想法吗?谢谢!

6 个答案:

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