JavaScriptを使って、HTML要素にチェンジイベント(onchange)を設定する方法について説明します。
実際に動くサンプルを使って、以下の操作を解説します。
・changeイベントで複数処理をしたい
・changeイベントをコードから実行(発火)するには?
changeイベントとは?
change
イベントは、フォーム要素(テキスト入力、セレクトボックス、チェックボックスなど)の値が変更されたときに発生するイベントです。
ユーザーが入力や選択を完了したときにトリガーされます。
入力したときに即時処理したいときにはkeyup
やkeydown
イベントを使うと良いかと思います。
changeイベントをつける方法
change
イベントをonchange属性やaddEventListener
を使ってつける方法についてです。
DOMにonchangeを使ってイベントをつける
HTMLのonchange
属性を使用して、イベントを設定する方法です。
<!DOCTYPE html>
<html lang="ja">
<head>
<title>onchange DOM Example</title>
</head>
<body>
<input type="text" id="myInput" onchange="handleChange()">
<script>
function handleChange() {
alert('入力内容が変更されました!');
}
</script>
</body>
</html>
HTMLの解説
input
タグにonchange
属性を追加しています。
属性の値にはhandleChange
関数を指定しており、これで入力内容が変更されたときにhandleChange
関数が実行されます。
JavaScriptの解説
handleChange
関数は、入力内容が変更されたときにアラートを表示するだけです。
このようにして、onchange
属性を使うことで、簡単にチェンジイベントを設定できます。
動作確認
入力が完了して、フォーカスを移すと、下記のようにアラート表示が確認できました。
addEventListenerを使ってイベントをつける
addEventListener
メソッドを使って、イベントリスナーを設定する方法です。
<!DOCTYPE html>
<html lang="ja">
<head>
<title>addEventListener Script Example</title>
</head>
<body>
<input type="text" id="myInput">
<script>
document.getElementById('myInput').addEventListener('change', function() {
alert('入力内容が変更されました!');
});
</script>
</body>
</html>
HTMLの解説
先ほどと同様にinput
タグにIDを設定して表示しているのみです。
addEventListener
メソッドを使ってチェンジイベントを設定します。
JavaScriptの解説
まず、「document.getElementById('myInput')
」で入力要素を取得します。
そして、addEventListener
を使って、入力要素にチェンジイベントを設定します。
第1引数にイベント名を記載して、第2引数に処理を書きます。
今回はchangeイベントなので、changeを指定しています。処理としてはアラートを表示しているだけです。
このようにaddEventListener
メソッドを呼び出して、コードからイベントを追加することもできます。
動かしてみると、onchange
に設定した時と同様に動きます。
changeイベントで複数処理をしたい
チェンジイベントで、複数の処理を実行する方法についてです。
DOMのonchangeで複数処理を実行する
onchange
属性に複数の関数を呼び出すコードを記述することができます。
<!DOCTYPE html>
<html lang="ja">
<head>
<title>Multiple Handlers with onchange</title>
</head>
<body>
<input type="text" id="myInput" onchange="firstFunction(); secondFunction();">
<script>
function firstFunction() {
console.log('最初の処理');
}
function secondFunction() {
console.log('次の処理');
}
</script>
</body>
</html>
onchage
属性に、カンマで区切って関数を書くと続けて処理されます。
動作確認
動作確認すると、このように続けて処理されることが確認できました。
addEventListenerで複数処理を実行する
addEventListener
メソッドを使うことでも、複数のイベントリスナーを追加することができます。
<!DOCTYPE html>
<html lang="ja">
<head>
<title>Multiple Handlers with addEventListener</title>
</head>
<body>
<input type="text" id="myInput">
<script>
let input = document.getElementById('myInput');
input.addEventListener('change', function() {
console.log('最初の処理');
});
input.addEventListener('change', function() {
console.log('次の処理');
});
</script>
</body>
</html>
addEventListener
を使って、入力要素にふたつのchange
イベントを設定しました。
この方法でも先ほどと同じように動作します。
要素の値を取得したい
ちなみに要素の値を取得したいときには、引数で取得することができます。
下記はevent.target
で要素を取得して、value
プロパティで値を参照しています。
input.addEventListener('change', function(event) {
console.log('最初の処理' + event.target.value);
});
changeイベントをコードから実行(発火)するには?
JavaScriptを使って、チェンジイベントをコードから実行する方法です。
これは、イベントをプログラムからトリガー(実行)したいときに役立ちます。
<!DOCTYPE html>
<html lang="ja">
<head>
<title>Trigger Change Event</title>
</head>
<body>
<input type="text" id="myInput">
<button id="triggerButton">チェンジイベントを発火</button>
<script>
let input = document.getElementById('myInput');
let triggerButton = document.getElementById('triggerButton');
input.addEventListener('change', function() {
console.log('入力内容が変更されました!:' + input.value);
});
triggerButton.addEventListener('click', function() {
let event = new Event('change');
input.dispatchEvent(event);
});
</script>
</body>
</html>
HTMLの解説
この例では、input
タグにidを設定して、2つの要素を用意しています。
1つ目の要素はテキスト入力フィールド、2つ目の要素は「チェンジイベントを発火」ボタンです。
ボタンをクリックすると、入力フィールドのチェンジイベントが発火します。
JavaScriptの解説
まずinput
要素とtriggerButton
要素をdocument.getElementById
で取得します。
input
要素にチェンジイベントリスナーを追加します。
addEventListener
を使用して、入力内容が変更されたときにコンソールにメッセージを表示します。
triggerButton
要素にクリックイベントリスナーを追加します。
このリスナー内で、新しいchange
イベントを作成し、input
要素に対してdispatchEvent
メソッドを使ってこのイベントを発火します。
このようにして、ボタンをクリックすると、input
要素のチェンジイベントがプログラムからトリガーされ、「入力内容が変更されました!」というメッセージがコンソールに表示されます。
この方法のときにはdispatchEvent
でイベントを実行するので、変更がなくても実行されます。
変更がある場合のみ実行したいときには、前回の値を下記のように保持して、テキストの値の変更があるか判定すると良いです。
let beforeValue = null;
triggerButton.addEventListener('click', function() {
if (beforeValue != input.value) {
beforeValue = input.value;
let event = new Event('change');
input.dispatchEvent(event);
}
});
動作確認
実際に動作させてみると、テキストフィールドに変更があると動作して、ボタンを押したときにも発火されて動くことが確認できました。
JavaScriptでチェンジイベントを設定する方法まとめ
JavaScriptを使ってチェンジイベントを設定し、操作する方法について解説しました。
以下にポイントをまとめます。
changeイベントをつける:onchange
属性を使った直接設定と、addEventListener
メソッドを使った設定方法を紹介しました。
changeイベントで複数処理をしたい:onchange
属性に複数の関数を記述する方法と、addEventListener
メソッドを使って複数のイベントリスナーを追加する方法を説明しました。
changeイベントをコードから実行(発火)する方法:dispatchEvent
メソッドを使って、プログラムからチェンジイベントを発火させる方法を紹介しました。
コメント