
フォーム要素やチェックボックスの状態変更を検知するchangeイベントはJavaScriptで動的な処理を実現するための基本機能です。
しかし、使い方を誤ると意図しない結果を引き起こすことがあります。
本記事では、changeイベントの正しい使い方を具体例とともに解説し、発生しがちな問題を防ぐためのヒントを紹介します。
目次
changeイベントとは?
changeイベントは、フォーム要素の値や状態が変更された後に発生します。このイベントは主に以下の要素で使用されます。
input(type="text",type="checkbox",type="radio"など)selecttextarea
発生のタイミング
textやtextarea: フォーカスが外れたときに発生します。checkboxやradio: チェック状態が変更された瞬間に発生します。select: 選択肢が変更された瞬間に発生します。
正しい使い方
チェックボックスの状態を取得する
チェックボックスの状態(checkedプロパティ)を取得するには、イベントオブジェクトを使用します。
const checkbox = document.querySelector('#myCheckbox');
checkbox.addEventListener('change', (event) => {
console.log('チェック状態:', event.target.checked);
});実行結果
- チェックされた場合:
true - チェックが外された場合:
false
よくある誤りとその結果
1. checkedプロパティを直接使用
間違ってeventを抜かして以下のように記述すると、意図しない結果を引き起こすことがあります。
checkbox.addEventListener('change', () => {
console.log('チェック状態:', checkbox.checked);
});問題点
- このコードでは、イベントリスナー内で
checkbox変数を直接参照しています。 - もし同じイベントリスナーを複数のチェックボックスに適用した場合、意図した結果が得られません。
2. valueを使用して状態を取得しようとする
checkbox.valueを使用すると、checkedプロパティとは異なる結果が得られます。
javascriptコードをコピーするcheckbox.addEventListener('change', (event) => {
console.log('値:', event.target.value);
});実行結果
valueプロパティは、チェックボックスの状態ではなく、<input>タグのvalue属性の値を返します。
応用例と注意点
チェックボックスの一括操作
複数のチェックボックスをまとめて操作する例です。
コード例
const checkboxes = document.querySelectorAll('.checkbox-group');
checkboxes.forEach((checkbox) => {
checkbox.addEventListener('change', (event) => {
console.log(`ID: ${event.target.id}, 状態: ${event.target.checked}`);
});
});注意点
- 必ず
event.targetを使用して現在のチェックボックスを参照する。 - 直接変数を参照すると、意図しないチェックボックスの状態を取得する可能性があります。
select要素の使用例
コード例
const dropdown = document.querySelector('#dropdown');
dropdown.addEventListener('change', (event) => {
console.log('選択された値:', event.target.value);
});実行結果
選択肢を変更すると、そのvalueが取得されます。
changeイベントとinputイベントの違い
changeイベント: 値や状態が確定したときに発生。inputイベント: 値が入力された瞬間に発生。
違いを確認する例
const inputField = document.querySelector('#textInput');
// changeイベント
inputField.addEventListener('change', () => {
console.log('change: フォーカスが外れた後に発生');
});
// inputイベント
inputField.addEventListener('input', () => {
console.log('input: 入力のたびに発生');
});まとめ
JavaScriptのchangeイベントは、フォーム要素の状態変更を検知する便利な機能です。
しかし正確な結果を得るためには、event.targetやcheckedプロパティの正しい使用が不可欠です。
本記事を参考に、適切なイベントリスナーの設定方法をマスターしてスムーズなユーザー体験を実現しましょう。








