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

Есть ли способ отключить проверку jQuery для определенного валидатора (кредитную карту), так что это происходит только onblur, а не onkeyup?

Основываясь на документации jQuery Validator, я подумал, что могу сделать что-то вроде этого:

$(function () { $("[data-val-creditcard]").validate({ onkeyup: false }) }); 

Однако, похоже, он не работает.

Я также попытался сделать следующее на моем валидаторе:

 public class CreditCardValidator : DataAnnotationsModelValidator { string _message; public CreditCardValidator(ModelMetadata metadata, ControllerContext context, CreditCardAttribute attribute) : base(metadata, context, attribute) { _message = attribute.ErrorMessage; } public override IEnumerable GetClientValidationRules() { var rule = new ModelClientValidationRule { ErrorMessage = _message, ValidationType = "creditcard" }; rule.ValidationParameters.Add("onkeyup", false); return new[] { rule }; } } 

Он тоже не работает, но я просто принимал удар по правильному использованию ValidationParameters.

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

Есть идеи? Благодаря!

Хорошо, парни,

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

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

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

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

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

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

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

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

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

Видеть

  • MVC 3, определяющий триггер проверки для удаленной проверки
  • Удаленная проверка ASP.NET только при размытии?

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

 $("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 для кредитного поля, а затем включить их в onblur. Кажется, взломан, но может работать.

Interesting Posts
Давайте будем гением компьютера.