2

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");

ここで、文字列エディタテンプレートと電子メールエディタテンプレートは同じですが、電子メールテンプレートがtype属性を明示的に「email」に設定している点が異なります。

データを入力せずに最初にフォームを送信すると、両方のフィールドが必須であるというクライアント側の検証が行われます。[名前]フィールドに入力を開始すると、検証の警告がすぐに消えます。[電子メール]フィールドに入力を開始しても、検証は残ります。

次に、[送信]をクリックすると、[メールフィールドが必須です]にもかかわらず、フォームが正しく送信されます。検証メッセージは表示されたままです。

電子メールエディタテンプレートを変更して、type="email"ではなくtype="text"を設定すると、検証によって期待どおりの方法がクリアされます(ただし、モバイルユーザーは電子メール固有のキーボードを使用できません)。

2つの質問:(1)なぜそれがそのように振る舞うのですか?(2)「適切に」動作させるにはどうすればよいですか(つまり、電子メールが入力されたときに「必要な」検証が消える)?

4

1 に答える 1

4

古いバージョンのjQueryvalidateを使用しているため、この動作が発生していると思います。1.9.0以降のプラグインは、電子メールを含むHTML5タイプの入力要素のキーアップ、フォーカスイン、フォーカスアウトを処理します。MVC3アプリケーションの標準テンプレートにはjqueryvalidate1.8.0が付属していますが、付属していません。

だからあなたの答え:

  1. jQueryの検証バージョン<1.9.0は​​、type = emailなどのhtml入力要素タイプのkeyup、focusin、focusoutイベントを処理しません

  2. jquery-validate.jsをアップグレードします-1.9.0以降

于 2013-01-28T15:38:09.170 に答える