無料サンプルレッスン:
JavaScript:フォームUI
クリックで動けば終わりではなく、入力状態・エラー・キーボード操作まで含めてフォームを作ります。
1. このレッスンのゴール
フォームの状態を整理し、ユーザーに現在地とエラーを正しく伝えられること。
2. 課題
メールアドレスが未入力・形式不正のときに、送信せずエラーを表示してください。
3. 提出例(初稿)
button.addEventListener('click', () => { alert('エラー'); });4. 講師のレビュー
- clickではなくformのsubmitを基準にするform の submit で、ボタン操作とEnterキーによる送信を同じ処理にまとめます。この例では novalidate でブラウザ標準の送信前検証を止め、入力の validity を読み取って自分でエラーを表示します。
- alertだけでなく入力欄とエラーを関連付けるalert は閉じると内容が消え、どの欄の話かもわかりません。エラー文を入力欄のそばに出し、aria-describedby で欄とつなぎましょう。
- エラー時は修正箇所へフォーカスを移すエラーを伝えても、直す場所を探させては不親切です。最初の誤りの欄へフォーカスを移せば、キーボードでもすぐ直せます。
5. 修正版
// HTML: form に novalidate、input に type="email" required を設定。
// error は id="email-error"、result は role="status" の表示領域です。
const form = document.querySelector('form');
const email = document.querySelector('#email');
const error = document.querySelector('#email-error');
const result = document.querySelector('#result');
form.addEventListener('submit', (event) => {
event.preventDefault(); // 練習用なので実際には送信しません
result.textContent = '';
if (!email.validity.valid) {
email.setAttribute('aria-invalid', 'true');
error.textContent = email.validity.valueMissing
? 'メールアドレスを入力してください。'
: 'メールアドレスの形式を確認してください。';
email.focus();
return;
}
email.removeAttribute('aria-invalid');
error.textContent = '';
result.textContent = '入力を確認しました(練習用・送信なし)';
});6. 合格基準
- Enterキーでも送信処理が動く
- 不正時に送信されない
- エラー内容が具体的
- キーボードだけで修正できる
※実際の受講では、提出した課題に講師がレビューを返し、合格基準を満たすまで修正します。ここで紹介している内容はサンプルです。
初稿と修正版を比べて、自分で直す。
空欄・形式不正・正しいメールアドレスの3通りを、ボタンとEnterキーで試してください。フォームのHTMLは共通です。個人情報は入れず、student@example.comなど練習用の値を使ってください。
ブラウザ内だけで動く練習です。入力した内容は保存・送信されません。編集後に「実行して確認」を押してください。
初稿から修正してみましょう。「修正版を入れる」で解答例と比較できます。
無料で読める、
15のサンプル。
実際の受講と同じように、課題 → レビュー → 修正 → 合格基準まで公開しています。
見た目ではなく「意味」でHTMLを書き、読み上げ・検索・保守に強いマークアップへ直します。
02CSSレスポンシブCSS固定幅で崩れるカードを、clamp・grid・container queryを使って小さい画面でも破綻しない設計へ直します。
03Direction / UX情報設計とワイヤーフレーム装飾を始める前に、ユーザーが知りたい順番と事業側の目的を整理してワイヤーに落とします。
04UI DesignUIデザインレビュー色や装飾より先に、優先順位・余白・タイポグラフィで読みやすい画面へ修正します。
05JavaScriptJavaScript:フォームUIクリックで動けば終わりではなく、入力状態・エラー・キーボード操作まで含めてフォームを作ります。
06Accessibilityアクセシビリティ:操作とコントラスト自動チェックだけに頼らず、キーボード・フォーカス・コントラストを実際に確認します。
07WordPress / CMSCMS:更新しやすい設計ページを作るだけでなく、運用担当者が壊さず更新できる情報構造と入力項目を設計します。
08SEOSEO:検索意図とページ設計キーワードを詰め込むのではなく、検索する人の疑問とページの役割を合わせます。
09QA / TestingQA:公開前テスト自分の端末で見えたからOKではなく、正常系・異常系・実機・速度をチェックリスト化します。
10Deploy / Operation公開・運用:リリース設計ファイルをアップして終わりではなく、公開前確認・切り戻し・監視までを一つのリリースとして設計します。
11Direction / Client Workヒアリングと要件定義「何を作りたいですか?」だけで終わらず、背景・課題・優先順位・制約を聞き、制作要件に変換します。
12HTML / AccessibilityHTML:行と列が伝わる表表の見出しを見た目だけで済ませず、caption・th・scopeで関係を示します。行の入れ替えと一セルの更新を通して、原稿との照合まで練習する無料レッスンです。
13CSS / PrintCSS:紙に残す案内の設計画面のメニューを印刷時だけ外し、集合場所や持ち物を紙へ残す無料レッスンです。初稿の適用範囲を直し、印刷プレビューと通常表示の両方で合格条件を確かめます。
14JavaScript / DOMJavaScript:一覧の絞り込みカテゴリ選択を一覧表示へつなぐ無料レッスンです。全件・一致・0件・全件への復帰を実装し、結果の重複や件数のずれを初稿から修正して確認します。
15Operation / Handover運用:更新を引き継ぐ手順書担当が替わっても更新できる手順書を作る無料レッスンです。架空の休館案内を使い、編集元・確認者・公開担当・停止条件・公開後確認を一枚へ整理します。