フォームを作ろう

WEB技術基礎

― 入力チェックとイベント処理の基本を理解する


はじめに

Webページにおいて、ユーザーから情報を入力してもらうフォームは非常に重要な要素のひとつです。お問い合わせフォーム、ログイン画面、検索窓など、フォームは日常的に使われています。

しかし、ユーザーが正しく情報を入力するとは限りません。メールアドレスの形式が違ったり、必須項目が未記入だったりすることもよくあります。そうした問題を防ぐために使われるのが、**バリデーション(入力検証)**と呼ばれる仕組みです。

今回は、HTMLでフォームを構築し、JavaScriptで入力内容をチェックする方法を学びます。あわせて、イベント処理の流れも整理していきましょう。


フォームとはなにか? HTMLでの基本構造

フォームは、<form>タグを使って定義します。内部には、<input>, <textarea>, <button>などの入力フィールドを配置します。ユーザーがこれらのフィールドに値を入力し、ボタンで送信する流れが基本です。

以下は簡単なお問い合わせフォームの例です:

<form id="contact-form">
  <label for="name">お名前:</label>
  <input type="text" id="name" name="name" required />

  <label for="email">メールアドレス:</label>
  <input type="email" id="email" name="email" required />

  <label for="message">メッセージ:</label>
  <textarea id="message" name="message" rows="5" required></textarea>

  <button type="submit">送信</button>
</form>

このようにHTMLだけでも、requiredtype="email"のような属性で簡易的なバリデーションを行うことができます。ただし、より柔軟な制御やエラー表示などを実現するには、JavaScriptによるカスタムバリデーションが不可欠です。

🔗 参考:HTML フォームの基本 – MDN Web Docs


イベント処理の基礎:フォームの送信をJavaScriptで制御する

JavaScriptでフォームの挙動を制御するには、**イベント処理(イベントリスナー)**の概念を理解する必要があります。

フォームが送信されると、ブラウザはデフォルトでページを再読み込みしようとします。それをJavaScriptで止めて、入力内容をチェックする流れが一般的です。

以下にフォームの送信イベントを処理する基本例を示します。

const form = document.getElementById('contact-form');

form.addEventListener('submit', function(event) {
  event.preventDefault(); // デフォルトの送信動作をキャンセル

  const name = document.getElementById('name').value.trim();
  const email = document.getElementById('email').value.trim();
  const message = document.getElementById('message').value.trim();

  if (!name || !email || !message) {
    alert('すべての項目を入力してください。');
    return;
  }

  if (!validateEmail(email)) {
    alert('正しいメールアドレスを入力してください。');
    return;
  }

  alert('送信が完了しました!');
});

function validateEmail(email) {
  const pattern = /^[^\s@]+@[^\s@]+\.[^\s@]+$/;
  return pattern.test(email);
}

このコードでは、以下のような処理を行っています:

  • フォーム送信時のsubmitイベントを検出
  • event.preventDefault()でデフォルトの動作を阻止
  • 各入力欄の値を取得し、空欄チェック
  • メールアドレスの形式を正規表現で検証

UIの改善:エラーメッセージを画面に表示する

前述の例ではalert()でエラーを通知しましたが、よりユーザーに優しい設計をするなら、ページ内にエラーメッセージを表示する方が望ましいです。

以下のように、エラー用の<div>を追加し、そこにJavaScriptからメッセージを出力する形にしてみましょう。

HTML

<div id="error-message" style="color: red;"></div>

JavaScriptの一部修正

const errorMessage = document.getElementById('error-message');

function showError(message) {
  errorMessage.textContent = message;
}

form.addEventListener('submit', function(event) {
  event.preventDefault();
  errorMessage.textContent = ''; // リセット

  // 同様のチェック処理
  if (!name || !email || !message) {
    showError('すべての項目を入力してください。');
    return;
  }
});

こうすることで、UX(ユーザー体験)が大きく向上します。フォームバリデーションは単に機能を実装するだけでなく、ユーザーにとってわかりやすく、親切であることが求められます。


よくあるバグとデバッグのポイント

  • form.addEventListenerが効かない → HTML読み込み前にJavaScriptが実行されていないか?
  • .valueで取得した値が常に空 → idの指定が正しいか、入力欄が存在しているか?
  • preventDefault()が効かずにページ遷移する → イベントの発火対象が正しいか?

JavaScriptでフォームを扱うときは、DOMの読み込みタイミングIDの一致が非常に重要です。開発者ツールの「Elements」タブや「Console」タブを使って、変数の中身やイベントの発火を確認する癖をつけましょう。

🔗 参考:イベントリスナーとフォーム処理 – JavaScript Primer


まとめ

JavaScriptによるフォーム処理は、Web開発の中でも非常に実用的かつ頻出なスキルです。特に、ユーザーが何かを入力して送信する場面はあらゆるサービスで登場します。

今回のポイントは以下の3つです:

  • HTMLでフォームを構築し、各フィールドに適切なidnameを付ける
  • JavaScriptで送信イベントを検知し、必要に応じてpreventDefault()を使う
  • 入力値のチェックとエラーメッセージの表示を丁寧に行う

次回は、さらに一歩進めて、**JavaScriptで外部のデータを取得してページに表示する(API通信)**という、実践的な機能を体験していきます。


次回予告

API通信を体験しよう ― JavaScriptで外部データを取得してWebページに表示する

コメント

タイトルとURLをコピーしました