最近、EFO(エントリーフォームオプティマイズ)の一環として、久しぶりにjQuery Validate Pluginを使って実装しておりました。
デフォルトだと、必須のテキストフィールドにフォーカスして未入力の場合、フォーカスアウトしてもバリデーションが実行されないようです。
海外の掲示板を見ていると、これを”Lazy validation”(怠けたバリデーション?)というように言っているのをよく見かけます。
この場合、一旦フォーカスした後にタブボタンで未入力フィールドを抜けると、エラー内容がでません。一旦フォーカスてたら未入力でフォーカスアウトしてもエラーが出るフォームも少なくないですし、「必須」と書いてあっても、それを見落とす人は必ず出てくるので、未入力でもなんにも問題無いというように見えてしまいます。そして、またォーカスしない限り、送信ボタンを押すまで、エラー内容に気づけない状態になり、大丈夫だと思って送信押した時に、大丈夫じゃなかったというのは、大きい離脱ポイントになる可能性があります。
なので、フォーカスアウトした時はいつでもバリデーションをして問題があれば表示したいと思いました。
その場合、どうするかというと以下のように記述します。
$validator = $("#form").validate({
rules: {
・・・
},
onfocusout: function(element) {
$(element).valid();
}
});
onfocousoutで、フォーカスアウト時にフォーカスアウトしたフィールドのバリデーションを走らせるイベントを設定します。
こうするとフォーカスアウトした時に必ずバリデーションを実施するようになります。