繁体   English   中英

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

[英]ASP.net MVC 3 jQuery Validation; Disable Unobtrusive OnKeyUp?

有没有一种方法可以禁用某个验证器(信用卡)的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的适当使用进行了尝试。

以某种形式输入信用卡号,然后随机将其从无效更改为有效,然后又变为无效,这很烦人。

有任何想法吗? 谢谢!

$.validator.setDefaults不适用于非侵入式验证,因为验证器是在内部初始化的。

要更改使用非侵入式验证的表单上的设置,您可以执行以下操作:

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

好了朋友们,

我遇到了同样的问题,发现了这个线程: 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 } );

而且您会看到,您的信用卡字段仅在模糊或提交时被选中(但其余字段也在键控上起作用)。

我一直在寻找相同的解决方案,但发现这里的答案可以改善,因此我认为在这里分享它会很好。

我意识到这是一篇过时的文章,但是似乎没有任何答案可以回答这个问题,

如何禁用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();
            };
        }

不知道如何将其设置为特定字段,但是您可以尝试使用此方法来禁用键盘验证(针对所有字段):

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

看到

您也可以使用上述类似内容,

$("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中将其关闭。 似乎很乱,但可以工作。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM