記事タイトル

// HTMLのフォーム要素を取得
const form = document.getElementById("input-form");
// 送信ボタンを取得
const submit = document.getElementById("submit");
// 各入力フィールドを取得
const fullName = document.getElementById("fullName");
const email = document.getElementById("email");
const phoneNumber = document.getElementById("phoneNumber");
const password = document.getElementById("password");
const checkPassword = document.getElementById("checkPassword");

// フォームが送信されたときのイベントリスナーを追加
form.addEventListener("submit", (e) => {
  e.preventDefault(); // デフォルトの送信動作をキャンセル
  checkInput(); // 入力をチェックする関数を実行
});

// フォームの入力をチェックする関数
function checkInput() {
  // 各入力値を取得
  const fullNameValue = fullName.value.trim();
  const emailValue = email.value.trim();
  const phoneNumberValue = phoneNumber.value.trim();
  const passwordValue = password.value.trim();
  const checkPasswordValue = checkPassword.value.trim();

  // 名前のバリデーション
  if (fullNameValue === "") {
    setErrorMessage(fullName, "入力されていません。");
  } else if (fullNameValue.length < 4 || fullNameValue.length > 50) {
    setErrorMessage(fullName, "入力範囲のエラーです。");
  } else {
    setSuccessMessage(fullName);
  }

  // メールアドレスのバリデーション
  if (emailValue === "") {
    setErrorMessage(email, "入力されていません。");
  } else if (!isValidateEmail(emailValue)) {
    setErrorMessage(email, "有効なメールアドレスではありません。");
  } else {
    setSuccessMessage(email);
  }

  // 電話番号のバリデーション
  if (phoneNumberValue === "") {
    setErrorMessage(phoneNumber, "入力されていません。");
  } else if (phoneNumberValue.length > 11) {
    setErrorMessage(phoneNumber, "有効な電話番号ではありません。");
  } else {
    setSuccessMessage(phoneNumber);
  }

  // パスワードのバリデーション
  if (passwordValue === "") {
    setErrorMessage(password, "入力されていません");
  } else if (passwordValue.length < 6 || passwordValue.length > 20) {
    setErrorMessage(password, "6桁から20桁の範囲で入力してください。");
  } else {
    setSuccessMessage(password);
  }

  // 確認用パスワードのバリデーション
  if (checkPasswordValue === "") {
    setErrorMessage(checkPassword, "入力されていません。");
  } else if (checkPasswordValue.length < 6 || checkPasswordValue.length > 20) {
    setErrorMessage(checkPassword, "6桁から20桁の範囲で入力してください。");
  } else if (passwordValue !== checkPasswordValue) {
    setErrorMessage(checkPassword, "パスワードが一致していません。");
  } else {
    setSuccessMessage(checkPassword);
  }
}

// エラーメッセージを設定する関数
function setErrorMessage(input, message) {
  const formControl = input.parentElement; // 入力フィールドの親要素を取得
  const small = formControl.querySelector("small"); // 親要素からsmall要素を取得
  small.innerText = message; // small要素にエラーメッセージをセット
  formControl.className = "form-control error"; // エラークラスを追加
}

// 入力成功時のメッセージを表示する関数
function setSuccessMessage(input) {
  const formControl = input.parentElement; // 入力フィールドの親要素を取得
  formControl.className = "form-control success"; // 成功クラスを追加
}

// ユーザー名のバリデーションチェック
function isUserNameValid(username) {
  const res = /^[a-z0-9_\.]+$/.exec(username);
  const valid = !!res;
  return valid;
}

// メールアドレスのバリデーションチェック
function isValidateEmail(email) {
  const re = /.+@.+\..+/;
  return re.test(email);
}


<!DOCTYPE html>
<html lang="en">
  <head>
    <meta charset="UTF-8" />
    <meta http-equiv="X-UA-Compatible" content="IE=edge" />
    <meta name="viewport" content="width=device-width, initial-scale=1.0" />
    <title>登録フォーム</title>
    <link rel="stylesheet" href="inputForm.css" />
  </head>

  <body>
    <section id="form-section">
      <div class="form-container">

        <div class="form-header">
          <h2 class="form-title">アカウント作成</h2>
        </div>

        <form action="" method="post" id="input-form">

          <div class="form-control">
            <label for="fullName">*氏名</label>
            <input type="text" name="fullName" placeholder="山田太郎" id="fullName" />
            <i class="uil uil-check-circle"></i>
            <i class="uil uil-exclamation-circle"></i>
            <small></small>
          </div>

          <div class="form-control">
            <label for="email">*メールアドレス</label>
            <input type="text" name="email" placeholder="Okayama@Tarou123.jp" id="email" />
            <i class="uil uil-check-circle"></i>
            <i class="uil uil-exclamation-circle"></i>
            <small></small>
          </div>

          <div class="form-control">
            <label for="phoneNumber">*電話番号</label>
            <input type="text" name="phoneNumber" placeholder="08012341234" id="phoneNumber" />
            <i class="uil uil-check-circle"></i>
            <i class="uil uil-exclamation-circle"></i>
            <small></small>
          </div>

          <div class="form-control">
            <label for="dataOfBirth">生年月日</label>
            <input type="date" name="dataOfBirth" id="dataOfBirth" />
          </div>

          <div class="form-control">
            <label for="gender">性別</label>
            <select name="gender" id="gender">
              <option disabled selected value>-- select an option --</option>
              <option value="male">Male</option>
              <option value="female">Female</option>
            </select>
          </div>


          <div class="form-control">
            <label for="userBio">何かあれば</label>
            <textarea name="userBio" id="userBio" cols="30" rows="5" placeholder="Write here something about yourself"></textarea>
          </div>


          <div class="form-control">
            <label for="password">*パスワード</label>
            <input type="password" name="password" placeholder="Type here a unique and strong password" id="password" />
            <i class="uil uil-check-circle"></i>
            <i class="uil uil-exclamation-circle"></i>
            <small></small>
          </div>


          <div class="form-control">
            <label for="checkPassword">*確認パスワード</label>
            <input type="password" name="checkPassword" placeholder="Retype here your define unique and strong password" id="checkPassword" />
            <i class="uil uil-check-circle"></i>
            <i class="uil uil-exclamation-circle"></i>
            <small></small>
          </div>

          <button type="submit" name="submit" id="submit" class="submit">Submit Now</button>
        </form>
      </div>
    </section>

    <script src="inputForm.js"></script>
  </body>
</html>
* {
  margin: 0 auto;
  padding: 0;
  -webkit-box-sizing: border-box;
          box-sizing: border-box;
}

* html {
  scroll-behavior: smooth;
}

* html body {
  font-family: "Poppins", "Trebuchet MS", "Lucida Sans Unicode", "Lucida Grande", Arial, sans-serif;
  background-color: #e0dfdb ;
}

/* =============== PRE TAG-SELECTORS =============== */
a {
  text-decoration: none;
}

li {
  list-style-type: none;
}

/* =============== PRE ATTRIBUTE-SELECTORS */
::-webkit-input-placeholder {
  opacity: 1;
  color: var(--gray-color);
  font-family: cursive;
  font-size: 14px;
}
:-ms-input-placeholder {
  opacity: 1;
  color: var(--gray-color);
  font-family: cursive;
  font-size: 14px;
}
::-ms-input-placeholder {
  opacity: 1;
  color: var(--gray-color);
  font-family: cursive;
  font-size: 14px;
}
::placeholder {
  opacity: 1;
  color: var(--gray-color);
  font-family: cursive;
  font-size: 14px;
}

/* IMPORT REGISTRATION FORM STYLE */
section#form-section .form-container {
  width: 480px;
  -webkit-box-shadow: rgba(0, 0, 0, 0.25) 0px 0.0625em 0.0625em, rgba(0, 0, 0, 0.25) 0px 0.125em 0.5em, rgba(255, 255, 255, 0.1) 0px 0px 0px 1px inset;
          box-shadow: rgba(0, 0, 0, 0.25) 0px 0.0625em 0.0625em, rgba(0, 0, 0, 0.25) 0px 0.125em 0.5em, rgba(255, 255, 255, 0.1) 0px 0px 0px 1px inset;
  border-radius: 5px;
  -webkit-border-radius: 5px;
  -moz-border-radius: 5px;
  -ms-border-radius: 5px;
  -o-border-radius: 5px;
  margin-top: 30px;
  margin-bottom: 30px;
}

section#form-section .form-container .form-header .form-title {
  font-size: 2.5rem;
  font-weight: bold;
  text-align: center;
  text-shadow: 2px 7px 5px rgba(0, 0, 0, 0.3), 0px -4px 10px rgba(255, 255, 255, 0.3);
}

section#form-section .form-container .form-header .show-error {
  background-color: #dc3545 ;
  margin: 10px 10px;
  border-radius: 5px;
  -webkit-border-radius: 5px;
  -moz-border-radius: 5px;
  -ms-border-radius: 5px;
  -o-border-radius: 5px;
  display: none;
}

section#form-section .form-container .form-header .show-error .error-message {
  font-size: 1rem;
  text-align: center;
  color: #ffffff ;
}

section#form-section .form-container form#input-form {
  -webkit-box-pack: center;
      -ms-flex-pack: center;
          justify-content: center;
  -webkit-box-align: center;
      -ms-flex-align: center;
          align-items: center;
}

section#form-section .form-container form#input-form .form-control {
  padding: 0 10px;
  position: relative;
}

section#form-section .form-container form#input-form .form-control label {
  display: block;
  font-size: 1.4rem;
  font-weight: bold;
  text-transform: capitalize;
}

section#form-section .form-container form#input-form .form-control input {
  width: 100%;
  padding: 10px;
  border: 2px solid #292b2c ;
  font-size: 1rem;
  border-radius: 5px;
  -webkit-border-radius: 5px;
  -moz-border-radius: 5px;
  -ms-border-radius: 5px;
  -o-border-radius: 5px;
  transition: all 0.5s ease-in-out;
  -webkit-transition: all 0.5s ease-in-out;
  -moz-transition: all 0.5s ease-in-out;
  -ms-transition: all 0.5s ease-in-out;
  -o-transition: all 0.5s ease-in-out;
}

section#form-section .form-container form#input-form .form-control input:focus {
  outline: none;
  border: 2px solid #007bff ;
  border-radius: 5px;
  -webkit-border-radius: 5px;
  -moz-border-radius: 5px;
  -ms-border-radius: 5px;
  -o-border-radius: 5px;
}

section#form-section .form-container form#input-form .form-control i {
  position: absolute;
  top: 42px;
  right: 20px;
  visibility: hidden;
}

section#form-section .form-container form#input-form .form-control small {
  font-size: 0.8rem;
  font-family: cursive;
  color: #dc3545 ;
  visibility: hidden;
}

section#form-section .form-container form#input-form .form-control select {
  width: 100%;
  padding: 10px;
  border: 2px solid #292b2c ;
  font-size: 1rem;
  border-radius: 5px;
  -webkit-border-radius: 5px;
  -moz-border-radius: 5px;
  -ms-border-radius: 5px;
  -o-border-radius: 5px;
  transition: all 0.5s ease-in-out;
  -webkit-transition: all 0.5s ease-in-out;
  -moz-transition: all 0.5s ease-in-out;
  -ms-transition: all 0.5s ease-in-out;
  -o-transition: all 0.5s ease-in-out;
}

section#form-section .form-container form#input-form .form-control select:focus {
  outline: none;
  border: 2px solid #007bff ;
  border-radius: 5px;
  -webkit-border-radius: 5px;
  -moz-border-radius: 5px;
  -ms-border-radius: 5px;
  -o-border-radius: 5px;
}

section#form-section .form-container form#input-form .form-control textarea {
  width: 100%;
  padding: 10px;
  border: 2px solid #292b2c ;
  font-size: 1rem;
  border-radius: 5px;
  -webkit-border-radius: 5px;
  -moz-border-radius: 5px;
  -ms-border-radius: 5px;
  -o-border-radius: 5px;
  transition: all 0.5s ease-in-out;
  -webkit-transition: all 0.5s ease-in-out;
  -moz-transition: all 0.5s ease-in-out;
  -ms-transition: all 0.5s ease-in-out;
  -o-transition: all 0.5s ease-in-out;
}

section#form-section .form-container form#input-form .form-control textarea:focus {
  outline: none;
  border: 2px solid #007bff ;
  border-radius: 5px;
  -webkit-border-radius: 5px;
  -moz-border-radius: 5px;
  -ms-border-radius: 5px;
  -o-border-radius: 5px;
}

section#form-section .form-container form#input-form .form-control #agree -tac {
  position: absolute;
  right: 222px;
  margin-top: 5px;
}

section#form-section .form-container form#input-form .form-control .message-tac {
  font-size: 1.1rem;
  margin-left: 20px;
  margin-bottom: 10px;
}

section#form-section .form-container form#input-form .form-control.success label {
  color: #28a745 ;
}

section#form-section .form-container form#input-form .form-control.success input {
  border: 2px solid #28a745 ;
}

section#form-section .form-container form#input-form .form-control.success i.uil-check-circle {
  visibility: visible;
  color: #28a745 ;
}

section#form-section .form-container form#input-form .form-control.success .uil-exclamation-circle {
  visibility: hidden;
}

section#form-section .form-container form#input-form .form-control.error label {
  color: #dc3545 ;
}

section#form-section .form-container form#input-form .form-control.error input {
  border: 2px solid #dc3545 ;
}

section#form-section .form-container form#input-form .form-control.error i.uil-check-circle {
  visibility: hidden;
}

section#form-section .form-container form#input-form .form-control.error .uil-exclamation-circle {
  visibility: visible;
  color: #dc3545 ;
}

section#form-section .form-container form#input-form .form-control.error small {
  visibility: visible;
}

section#form-section .form-container form#input-form button.submit {
  width: 80%;
  padding: 10px;
  margin: 10px 20px;
  -webkit-box-shadow: rgba(60, 64, 67, 0.3) 0px 1px 2px 0px, rgba(60, 64, 67, 0.15) 0px 1px 3px 1px;
          box-shadow: rgba(60, 64, 67, 0.3) 0px 1px 2px 0px, rgba(60, 64, 67, 0.15) 0px 1px 3px 1px;
  margin-left: 50px;
  background-color: #ffffff ;
  border: 2px solid #292b2c ;
  border-radius: 5px;
  -webkit-border-radius: 5px;
  -moz-border-radius: 5px;
  -ms-border-radius: 5px;
  -o-border-radius: 5px;
  font-size: 1rem;
  font-weight: bold;
  color: #000000 ;
  transition: all 0.5s ease-in-out;
  -webkit-transition: all 0.5s ease-in-out;
  -moz-transition: all 0.5s ease-in-out;
  -ms-transition: all 0.5s ease-in-out;
  -o-transition: all 0.5s ease-in-out;
  cursor: pointer;
}

section#form-section .form-container form#input-form button.submit:hover {
  color: #ffffff ;
  background-color: #007bff ;
  border: 2px solid #007bff ;
  border-radius: 50px;
  -webkit-border-radius: 50px;
  -moz-border-radius: 50px;
  -ms-border-radius: 50px;
  -o-border-radius: 50px;
}

section#form-section .form-container form#input-form button.disabled {
  color: #808080 ;
  border: 2px solid #808080 ;
}

section#form-section .form-container form#input-form button.disabled:hover {
  color: #292b2c ;
  background-color: #ffffff ;
  border: 2px solid #292b2c ;
  border-radius: 5px;
  -webkit-border-radius: 5px;
  -moz-border-radius: 5px;
  -ms-border-radius: 5px;
  -o-border-radius: 5px;
}
/*# sourceMappingURL=style.css.map */

この記事が気に入ったらサポートをしてみませんか?