次のことも考慮して、「リアルタイム」で更新する検証サマリーを設定しました。
- 要約が表示されたら(ページの検証/送信後)のみ更新します
- すべてが有効になったら、要約をクリアします
バリデーターを抽出し、showErrors()をオーバーライドして、ロジックを実装しましょう。
var validator = $('form').data('validator');
validator.settings.showErrors = function (map, errors) {
this.defaultShowErrors();
if ($('div[data-valmsg-summary=true] li:visible').length) {
this.checkForm();
if (this.errorList.length)
$(this.currentForm).triggerHandler("invalid-form", [this]);
else
$(this.currentForm).resetSummary();
}
}
このソリューションをサイト全体で使用しているため、次のinitを作成しました(すでに):
$('form').each(function () {
var validator = $(this).data('validator');
if (validator) {
validator.settings.showErrors = function (map, errors) {
this.defaultShowErrors();
if ($('div[data-valmsg-summary=true] li:visible').length) {
this.checkForm();
if (this.errorList.length)
$(this.currentForm).triggerHandler("invalid-form", [this]);
else
$(this.currentForm).resetSummary();
}
};
}
});
上記で使用したresetSummaryは次のとおりです。
jQuery.fn.resetSummary = function () {
var form = this.is('form') ? this : this.closest('form');
form.find("[data-valmsg-summary=true]")
.removeClass("validation-summary-errors")
.addClass("validation-summary-valid")
.find("ul")
.empty();
return this;
};