概要
BootStrapのタブ使用時に非表示タブに対してバリデーションが効かないことが判明した。以下、非表示タブに対してもバリデーションチェックを適応する対処法です。ignoreオプションが未指定の場合:hiddenは無視するような設定となっているので初期化してあげます。後はinvalidaHandlerでエラー発生時にエラーリストの一番最初の要素のタブに遷移し、フォーカスをするようにしています。タイミングでうまくfocusしない場合があるため、タブ読み込み完了時にもerroを見に行きfocusを設定するようにしています。
対処法
$("自分のform").validate({
rules: {
・・・///各々バリデーションルール記載(省略)
},
invalidHandler: function(form, validator) {
var parentId = $(validator.errorList[0].element).closest(".tab-pane").attr('id');
$('a[href="#' + parentId + '"]').tab('show');
$(validator.errorList[0].element).focus();
},
ignore: []
});
//念のため、タブ読み込み完了時にも処理
$('a[data-toggle="tab"]').on('shown.bs.tab', function() {
if ($("select.error,input.error").length > 0) {
$("select.error,input.error")[0].focus();
}
});