SPIRALのフォームでエラーサマリーを表示するJavaScriptをご紹介します。
機能としてはエラーメッセージをカウントし内部リンクによってエラー位置に遷移するというシンプルなものですが、どこでエラーが起きたかを一目で把握でき、エラー位置までクリック一つで遷移することができるため入力中の離脱を防ぐ効果が期待できます。
設定デザインに対して簡単なHTMLとJavaScriptの追記で実装できますので是非お試しください。
エラーサマリーとは?実装するメリット
まずはデモサイトをご覧ください。あえて必須入力のものを入力しないで送信ボタンを押してみてください。
デモサイト
通常のSPIRAL ver1の設定デザインのフォームではエラーが起こった際、各入力項目のmsgというクラスがついたspanタグの中にSPIRALで設定したエラーメッセージが出力されます。
エラーサマリーとは、フォーム送信後に発生したエラーを一覧化し、フォーム上部にまとめて表示するUIパターンです。
以下に項目ごとのエラー表示とエラーサマリーの長所と短所についてまとめました。
| 長所 | 短所 | |
|---|---|---|
| 項目ごとのエラー表示 | 入力項目に対し「どんな文字で」「何文字」入力すべきか等、エラーを解消するための詳細な指示が可能。 | フォーム全体で修正すべき箇所の全体像が把握しにくい。 |
| エラーサマリー | 一目でどれくらい修正すべき箇所があるのか把握可能。 | それぞれの項目に対する詳細な指示を出すのには不向き。 |
上記のような違いから、両者は対立するものではなく補完関係にあり理想的にはどちらも実装すると良いでしょう。
SPIRALは標準で項目ごとのエラー表示を備えているため、今回紹介するエラーサマリーを実装すれば入力者にとって優しいフォームになります。
実装方法1:事前準備
SPIRALで適当なフォームを作成してください。デモサイトで用意したフォームも特別な設定はしていません。「使用フィールド」でフォームに表示する項目を選んだ後、「フィールド別チェック」にて数項目を入力必須に設定したのみです。
実装方法2:HTML編集
SPIRALでエラーを出力しているヘッダー箇所に以下のようにidを付与してください。ここにエラーサマリーが出力されます。
<p class="header_emesg" id="error_summary">ご入力内容に不備がございます。エラーが発生した項目を修正し、送信しなおしてください。</p>
実装方法3:JavaScript追加
body直下に以下のJavaScriptをコピペし貼り付けてください。
<script>
document.addEventListener('DOMContentLoaded', function () {
// エラーメッセージのspan要素をすべて取得
const errorSpans = document.querySelectorAll('span.msg');
// エラーメッセージのリストを格納する配列
let errorLinks = [];
// エラーがあった項目の数をカウントするカウンター
let errorCount = 0;
// 各エラーメッセージのspanをループ処理
errorSpans.forEach((span, index) => {
// span内にテキスト(エラーメッセージ)が存在するかチェック
if (span.innerText.trim() !== '') {
errorCount++;
// 親のdl要素(各入力項目のかたまり)を取得
const parentDl = span.closest('dl');
if (parentDl) {
// dl要素にユニークなIDを付与
const anchorId = `error-item-${index}`;
parentDl.id = anchorId;
// dt要素(項目タイトル)を取得
const titleElement = parentDl.querySelector('dt.title');
if (titleElement) {
// dt要素のテキスト(項目名)を取得(内部のspan.needは除外)
const titleText = titleElement.cloneNode(true);
const needSpan = titleText.querySelector('.need');
if (needSpan) {
needSpan.remove();
}
// エラーリストに追加
errorLinks.push(`<li><a href="#${anchorId}">${titleText.innerText.trim()}</a></li>`);
}
}
}
});
// エラーが1つ以上あった場合
if (errorCount > 0) {
const errorSummaryEl = document.getElementById('error_summary');
if (errorSummaryEl) {
// エラーヘッダーのテキストを更新
errorSummaryEl.innerHTML = `ご入力内容に ${errorCount} 件の不備がございます。エラーが発生した項目を修正し、送信しなおしてください。<ul style="list-style-type: disc; margin-left: 20px;">${errorLinks.join('')}</ul>`;
}
}
});
</script>
以上で実装は完了です。SPIRALにデフォルトで存在するタグに対して処理を行っているためJavaScriptを書き換える必要もありません。
JavaScriptの処理内容解説
このエラー表示の処理内容を解説します。
- 1. DOMContentLoadedで実行を開始(ページ読み込み時)
- 2. すべての
span.msg
を調査し、テキストが空でないものを「エラーあり」と判定して件数をカウント - 3. 該当スパンの親
dl
にアンカー用の一意なID(error-item-...
)を付与する。 - 4.
dt.title
から必須マーク(span.need
)を除いた項目名を取得 - 5. 項目名とアンカーIDからリンク(箇条書き)を作成し、エラー見出しに差し込み
入力ページへのコードの反映のみで済むため簡単にユーザー体験の向上が見込めます。ぜひご自身のフォームに適用してみてください。