Как получить ненавязчивую проверку, чтобы очистить требуемую проверку при вводе электронной почты?

У меня есть мобильное приложение, которое я пишу на ASP.Net MVC3 (используя ненавязчивую проверку JQuery). В рамках этого я собираю информацию об именах и адресах электронной почты пользователей. Моя модель включает такие поля, как:

  [Required] public String Name {get; set;}
  [Required] public String Email {get; set;}

На мой взгляд, у меня есть элемент ввода формы:

@Html.EditorFor(m => m.Name);
@Html.EditorFor(m => m.Email, "Email");

где шаблон редактора String и шаблон редактора электронной почты идентичны, за исключением того, что шаблон электронной почты явно задает для атрибута type значение "email".

Когда я первоначально отправляю форму без ввода каких-либо данных, я получаю проверки на стороне клиента, в которых указывается, что оба поля являются обязательными. Когда я начинаю печатать в поле «Имя», предупреждение о проверке сразу исчезает. Когда я начинаю печатать в поле «Электронная почта», проверка остается.

Затем я могу нажать «Отправить», и форма будет отправлена ​​​​правильно, несмотря на то, что «поле электронной почты обязательно». сообщение проверки остается видимым.

Если я изменю шаблон редактора электронной почты, чтобы установить type="text" вместо type="email", проверка очищается так, как я ожидаю (но мобильные пользователи не получат клавиатуру для электронной почты).

Два вопроса: (1) Почему он ведет себя именно так? (2) Как я могу заставить его вести себя «правильно» (т. Е. «Требуемая» проверка исчезает при вводе электронной почты)?


person Blaise Pascal    schedule 25.01.2013    source источник
comment
Не могли бы вы показать шаблон редактора электронной почты?   -  person Bahman    schedule 26.01.2013


Ответы (1)


Я думаю, что вы получаете такое поведение, потому что используете более старую версию проверки jQuery. Плагин, начиная с версии 1.9.0, обрабатывает клавиши, фокус и фокус для элементов ввода с типами HTML5, включая электронную почту. Стандартный шаблон приложения MVC3 поставляется с проверкой jquery 1.8.0, чего не будет.

Итак, ваши ответы:

  1. jQuery проверяет версии ‹ 1.9.0 не обрабатывает события keyup, focusin и focusout для типов элементов ввода html, таких как type=email

  2. Обновите jquery-validate.js — 1.9.0 или выше

person Dr Blowhard    schedule 28.01.2013
comment
Спасибо! Это сработало. Оказывается, я использовал jQuery validate версии 1.5, которая довольно старая. Обновление до 1.10 исправило это. - person Blaise Pascal; 28.01.2013