Skip to content

サンプルプロジェクト: フォームバリデーションを含むウェブページの構築

公開日:November 16, 2024更新日:November 28, 2024
JavaScriptTypeScriptCoding📄

このサンプルプロジェクトでは、JavaScriptを使って簡単なフォームバリデーションを実装したウェブページを構築します。ユーザーが入力フォームに適切な情報を入力したかどうかをリアルタイムでチェックし、不正な入力があった場合にエラーメッセージを表示します。

1. HTML構造の作成

まず、フォームを持つ基本的なHTMLを作成します。ユーザー名とメールアドレス、パスワードの3つの入力フィールドを用意し、送信ボタンを追加します。

html
<!DOCTYPE html>
<html lang="ja">
<head>
  <meta charset="UTF-8">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <title>フォームバリデーションのサンプル</title>
  <link rel="stylesheet" href="styles.css">
</head>
<body>
  <div class="container">
    <h2>ユーザー登録フォーム</h2>
    <form id="registrationForm">
      <div class="form-group">
        <label for="username">ユーザー名:</label>
        <input type="text" id="username" name="username" required>
        <small class="error-message" id="usernameError"></small>
      </div>
      <div class="form-group">
        <label for="email">メールアドレス:</label>
        <input type="email" id="email" name="email" required>
        <small class="error-message" id="emailError"></small>
      </div>
      <div class="form-group">
        <label for="password">パスワード:</label>
        <input type="password" id="password" name="password" required minlength="6">
        <small class="error-message" id="passwordError"></small>
      </div>
      <button type="submit">登録</button>
    </form>
  </div>
  <script src="script.js"></script>
</body>
</html>

2. CSSでスタイルを整える

フォームの見た目を整えるために、簡単なスタイルを追加します。

css
/* styles.css */
body {
  font-family: Arial, sans-serif;
  background-color: #f0f0f0;
  display: flex;
  justify-content: center;
  align-items: center;
  height: 100vh;
  margin: 0;
}

.container {
  background-color: #fff;
  padding: 20px;
  border-radius: 5px;
  box-shadow: 0 0 10px rgba(0, 0, 0, 0.1);
}

.form-group {
  margin-bottom: 15px;
}

.error-message {
  color: red;
  font-size: 0.875em;
}

3. JavaScriptでフォームバリデーションを実装

JavaScriptを使って、ユーザーの入力が正しいかどうかを確認するバリデーションを行います。

javascript
// script.js
document.addEventListener('DOMContentLoaded', () => {
  const form = document.getElementById('registrationForm');
  const username = document.getElementById('username');
  const email = document.getElementById('email');
  const password = document.getElementById('password');
  const usernameError = document.getElementById('usernameError');
  const emailError = document.getElementById('emailError');
  const passwordError = document.getElementById('passwordError');

  form.addEventListener('submit', (e) => {
    let isValid = true;

    // ユーザー名のバリデーション
    if (username.value.trim() === '') {
      usernameError.textContent = 'ユーザー名を入力してください。';
      isValid = false;
    } else {
      usernameError.textContent = '';
    }

    // メールアドレスのバリデーション
    if (email.value.trim() === '' || !email.value.includes('@')) {
      emailError.textContent = '有効なメールアドレスを入力してください。';
      isValid = false;
    } else {
      emailError.textContent = '';
    }

    // パスワードのバリデーション
    if (password.value.trim().length < 6) {
      passwordError.textContent = 'パスワードは6文字以上で入力してください。';
      isValid = false;
    } else {
      passwordError.textContent = '';
    }

    // フォームが無効な場合、送信をキャンセル
    if (!isValid) {
      e.preventDefault();
    } else {
      // バックエンドへのデータ送信
      e.preventDefault();
      const formData = {
        username: username.value,
        email: email.value,
        password: password.value
      };

      fetch('https://example.com/api/register', {
        method: 'POST',
        headers: {
          'Content-Type': 'application/json'
        },
        body: JSON.stringify(formData)
      })
        .then(response => {
          if (!response.ok) {
            throw new Error('登録に失敗しました。');
          }
          return response.json();
        })
        .then(data => {
          alert('登録が完了しました!');
          console.log('登録データ:', data);
        })
        .catch(error => {
          alert('エラーが発生しました: ' + error.message);
        });
    }
  });
});

解説

  • HTML部分では、ユーザー名、メールアドレス、パスワードの入力フィールドを持つフォームを作成しました。それぞれのフィールドには required 属性を追加して、入力が必須であることを示しています。
  • CSS部分では、フォーム全体の見た目を整え、エラーメッセージのスタイルを設定しています。
  • JavaScript部分では、フォームの submit イベントに対してバリデーション処理を追加しました。usernameemailpassword の各入力フィールドをチェックし、不正な入力があればエラーメッセージを表示し、フォームの送信を防ぎます。また、バリデーションが通った場合は、fetch を使ってバックエンドにデータを送信し、登録処理を行います。

まとめ

このサンプルプロジェクトを通じて、JavaScriptを使った基本的なフォームバリデーションの実装方法を学びました。これにより、ユーザーが正しい情報を入力することを促し、エラーを未然に防ぐことができます。また、fetch を使ってデータをサーバーに送信し、実際の登録処理を行う方法も学びました。このようにして、フロントエンドとバックエンドを連携させた実用的なフォームを構築することができます。