無理しないでゆっくり休んでね!

【JavaScript】changeとsubmitの違いとは?フォーム入力チェックの正しい使い分け

フォームの入力チェックやデータ送信時、JavaScriptで「いつ処理を実行するか」を制御することはとても重要です。
よく使われるイベントには changesubmit の2つがありますが、それぞれタイミングや用途が異なるため、正しく使い分ける必要があります。

この記事では、初心者にも分かりやすく、changesubmitの違いや使い方を丁寧に解説します。

changeイベントとは?

発火タイミング

<input><select>値が変更されて、さらにフォーカスが外れたとき に発火します。

つまり、変更しただけでは発火せず、入力欄を離れたタイミングで初めて発火します。

対象となる要素

  • <input type="text">
  • <select>
  • <textarea>
  • <input type="file">
  • <input type="checkbox"> / <input type="radio">

使用例

<label>都道府県:</label>
<select id="pref">
  <option value="">選択してください</option>
  <option value="tokyo">東京都</option>
  <option value="osaka">大阪府</option>
</select>

<script>
  document.getElementById("pref").addEventListener("change", function () {
    alert("選択された都道府県:" + this.value);
  });
</script>

checkboxradioはクリックした瞬間にchangeが発生しますが、texttextarea変更後にフォーカスを外す必要があるので注意。

submitイベントとは?

発火タイミング

フォームが送信される直前に発火します。ボタンをクリックするか、Enterキーで送信されたときなどです。

対象となる要素

  • <form>

使用目的

  • 入力内容の最終チェック(バリデーション)
  • 入力が不正な場合の送信キャンセル(event.preventDefault()
  • 確認ダイアログやAjax送信などの代替処理

使用例

<form id="myForm">
  <input type="text" name="username" required>
  <button type="submit">送信</button>
</form>

<script>
  document.getElementById("myForm").addEventListener("submit", function (event) {
    const username = this.username.value.trim();
    if (username === "") {
      alert("ユーザー名を入力してください");
      event.preventDefault(); // 送信をキャンセル
    }
  });
</script>

submitイベントでは、送信後のページ遷移を防ぐには必ず event.preventDefault() を使う必要があります。

change と submit の使い分け方

比較項目changesubmit
発火タイミング値が変更されてフォーカスが外れたときフォームが送信される直前
主な用途項目ごとのバリデーション、UI更新入力全体の最終チェック、送信制御
使用対象input, select, textareaなどformタグ全体
よくある使い方プルダウン選択で色変更、項目に応じて表示変更など入力漏れチェック、エラー時に送信ブロックなど

例:両方を使った入力チェック

<form id="signupForm">
  <label>年齢:<input type="number" id="age" required></label><br>
  <span id="ageMsg" style="color:red;"></span><br>
  <button type="submit">送信</button>
</form>

<script>
  const ageInput = document.getElementById("age");
  const ageMsg = document.getElementById("ageMsg");

  // 値変更時にリアルタイムメッセージ
  ageInput.addEventListener("change", function () {
    if (this.value < 18) {
      ageMsg.textContent = "18歳以上が必要です。";
    } else {
      ageMsg.textContent = "";
    }
  });

  // 送信時に最終チェック
  document.getElementById("signupForm").addEventListener("submit", function (e) {
    if (ageInput.value < 18) {
      alert("年齢制限により送信できません。");
      e.preventDefault();
    }
  });
</script>


まとめ

状況適切なイベント
ユーザーが選択を変えたときに何かをしたいchange
入力内容の確認や整合性チェックをしたいsubmit
送信前に最終確認やブロックをしたいsubmit
ファイルが選ばれたら自動で処理したいchange

changeは「今、何を入力したか」に反応するイベント

submitは「もう送ろうとしている」ことに対して最後の確認をするイベントです。

使い分けをしっかり理解することで、ミスを防ぎ、より使いやすいフォームUIを作ることができます!

コメント

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