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.
Нехорошо вводить номер кредитной карты в форме и иметь случайное изменение от недействительного до действительного, а затем обратно к недействительному.
Любые идеи? Спасибо!
Ответы
Ответ 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. Кажется взломанным, но может работать.