セットアップ:
- クライアント側の検証(+控えめなJavaScript)が有効になっているASP.NETMVC4。
- jquery 1.8.2
- jquery.validate 1.10.0
- jquery.validate.unobtrusive
html:
<form action="/" method="post">
<select data-val="true" data-val-required="DropDown is required." id="DropDown" name="DropDown">
<option value="">Select a letter</option>
<option>A</option>
<option>B</option>
<option>C</option>
</select>
<span data-valmsg-for="DropDown" data-valmsg-replace="true"></span>
<br/>
<button type="submit">Submit</button>
</form>
ここで実際の動作を確認できます。
ドロップダウンのサーバー側のコードは、かなり面白くありません。
// View Model
public class ViewModel
{
[Required]
public string DropDown { get; set; }
}
// View
@Html.DropDownListFor(m => m.DropDown,
new SelectList(new[] { "A", "B", "C" }),
"Select a letter")
そして、問題を確認するための手順は次のとおりです。
- マウスを使用して、値(A、B、C)のいずれかを選択します。
- マウスを使用して、デフォルトの空の値を選択します(文字を選択します)。必要なメッセージは表示されません。
- 矢印キーを使用して、値(A、B、C)のいずれかを選択します。
- 矢印キーを使用して、デフォルトの空の値を選択します(文字を選択します)。今回は、必要なメッセージが表示されます。
- マウスを使用して、値(A、B、C)のいずれかを選択します。必要なメッセージが消えます。
- マウスを使用して、デフォルトの空の値を選択します(文字を選択します)。必要なメッセージが表示されます。
検証が初めてトリガーされるまで(キーボードで値を変更するか、送信ボタンを押すことによって)、イベントはマウスイベントに対して開始されないようです。なぜこれが起こっているのか(私は何か間違ったことをしているのですか?)、または回避策についての説明をいただければ幸いです。
ありがとう!