it-roy-ru.com

ASP.net MVC 3 Проверка jQuery; Отключить ненавязчивый OnKeyUp?

Есть ли способ отключить JQuery Validation для определенного валидатора (кредитной карты), чтобы он происходил только 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.

Это немного раздражает, когда вы вводите номер кредитной карты в форму и случайным образом меняете его с недействительного на действительный, а затем обратно на недействительный.

Есть идеи? Спасибо!

25
Sam

Хорошо, ребята,

Я был в той же проблеме и нашел эту тему: 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 } );

И вы увидите, что поле вашей кредитной карты проверяется только при размытии или при отправке (но остальное также работает с keyup).

Я искал такое же решение и обнаружил, что ответ здесь можно улучшить, поэтому я подумал, что было бы неплохо поделиться им здесь.

20
mTorres

$.validator.setDefaults не работает для ненавязчивой проверки, так как валидатор инициализируется внутри.

Чтобы изменить параметры в формах, которые используют ненавязчивую проверку, вы можете сделать следующее:

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

Я понимаю, что это старый пост, но ни один из ответов не отвечает на этот вопрос, 

Как отключить onkeyup и включить onblur?

Я искал это так, думал, что поделюсь ответом.

Как правильно сказал Бен Фостер, 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();
            };
        }
9
Colin Bacon

Не знаю, как установить его для определенного поля, но вы можете попробовать это, чтобы отключить проверку keyup (для всех полей): 

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

Увидеть

5
epzee

Вы также можете использовать что-то вроде выше, 

$("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 мне очень помог.

1
George Siggouroglou

Вы можете отключить настройки по умолчанию в событии onfocus в поле кредита, а затем включить их в onblur. Кажется, хак, но может работать.

0
Erik Funkenbusch