フォームの入力チェックやデータ送信時、JavaScriptで「いつ処理を実行するか」を制御することはとても重要です。
よく使われるイベントには change
と submit
の2つがありますが、それぞれタイミングや用途が異なるため、正しく使い分ける必要があります。
この記事では、初心者にも分かりやすく、change
とsubmit
の違いや使い方を丁寧に解説します。
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>
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>
change と submit の使い分け方
比較項目 | change | submit |
---|---|---|
発火タイミング | 値が変更されてフォーカスが外れたとき | フォームが送信される直前 |
主な用途 | 項目ごとのバリデーション、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を作ることができます!
コメント