JavaScriptのonchangeイベントハンドラ解説
onchangeイベントハンドラについて
JavaScriptのonchangeイベントハンドラは、ユーザーがフォーム要素(例: input
, select
, textarea
)の値を変更し、それを確定したタイミングでトリガーされるイベントです。
例えば、テキストボックス内の値を変更してフォーカスを外すか、エンターキーを押すと発生します。
このイベントはリアルタイムで変更を検出するoninput
とは異なり、ユーザーが明示的に入力を終了したことを前提とします。
基本的な使い方
onchange
属性はHTML要素に直接記述できます。また、JavaScriptでプログラム的に設定することもできます。
HTMLで直接設定する方法
onchange
属性をHTML要素に追加して直接スクリプトを記述する方法です。
<input type="text" onchange="alert('値が変更されました!');">
上記の場合、ユーザーが値を変更してフォーカスを外すと、アラートが表示されます。
JavaScriptで設定する方法
JavaScriptを使用してイベントハンドラを設定する方法です。
<input type="text" id="myInput"> <script> document.getElementById('myInput').onchange = function() { alert('値が変更されました!'); }; </script>
この方法では、onchange
を直接HTMLに記述する代わりに、JavaScriptコード内で設定できます。
onchangeの具体例
テキスト入力での使用例
以下は、テキストボックスの値が変更されたときにその値を取得して表示する例です。
<input type="text" id="textInput"> <p id="textOutput"></p> <script> document.getElementById('textInput').onchange = function() { document.getElementById('textOutput').textContent = '入力された値: ' + this.value; }; </script>
セレクトボックスでの使用例
セレクトボックスの選択が変更されたときに選択された値を表示します。
<select id="selectBox"> <option value="apple">Apple</option> <option value="banana">Banana</option> <option value="cherry">Cherry</option> </select> <p id="selectedValue"></p> <script> document.getElementById('selectBox').onchange = function() { document.getElementById('selectedValue').textContent = '選択された値: ' + this.value; }; </script>
チェックボックスでの使用例
チェックボックスの状態が変更されたときに状態を表示します。
<input type="checkbox" id="checkbox"> チェックボックス <p id="checkboxStatus"></p> <script> document.getElementById('checkbox').onchange = function() { document.getElementById('checkboxStatus').textContent = this.checked ? 'チェックされています' : 'チェックされていません'; }; </script>
onchangeとoninputの違い
onchange
はユーザーが入力を終了したタイミングで発生しますが、oninput
は入力中にリアルタイムで発生します。
以下はその違いを比較する例です。
<input type="text" id="onchangeInput" placeholder="onchange"> <p id="onchangeOutput"></p> <input type="text" id="oninputInput" placeholder="oninput"> <p id="oninputOutput"></p> <script> document.getElementById('onchangeInput').onchange = function() { document.getElementById('onchangeOutput').textContent = 'onchange: ' + this.value; }; document.getElementById('oninputInput').oninput = function() { document.getElementById('oninputOutput').textContent = 'oninput: ' + this.value; }; </script>
ベストプラクティス
onchange
を使用する際のベストプラクティスを以下に示します。
- ユーザーが値を確定したタイミングで処理を行いたい場合に使用する。
- 複雑な処理は関数として分離し、イベントハンドラ内で関数を呼び出す。
- 可能であればHTML内のスクリプトを避け、外部JavaScriptファイルに記述する。
まとめ
onchange
はユーザーが入力を終了したタイミングで値の変更を検出するために非常に便利なイベントハンドラです。
テキストボックスやセレクトボックス、チェックボックスなど、さまざまなフォーム要素で使用できます。
リアルタイム検出が必要な場合はoninput
を使い、目的に応じて使い分けることが重要です。