Подтвердить что ты не робот

ASP.net MVC 3 jQuery Validation; Отключить ненавязчивый 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.

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

Любые идеи? Спасибо!

4b9b3361

Ответ 1

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

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

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

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

Ответ 2

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

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

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

Ответ 3

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

Как отключить 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();
            };
        }

Ответ 4

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

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

См

Ответ 5

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

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

Ответ 6

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