4日目のゴール
4日目のテーマは
「イベントと id を、“小さいおもちゃ”から“ちゃんとしたミニアプリ”に育てる感覚をつかむこと」 です。
今日もキーワードは同じです。
JavaScript はイベントで動く
id で HTML を取得する
ただし今日は、「ちょっと現実っぽい UI」を題材にして、
イベントと id をどう組み合わせるかをじっくり見ていきます。
ON/OFF スイッチ風ボタンを作ってみる
状態を持つボタンのイメージ
まずは、「ON / OFF を切り替えるスイッチ風ボタン」を作ります。
やりたいことはこうです。
最初は OFF 状態
ボタンを押すたびに ON / OFF が切り替わる
画面の表示も「今どっちか」が分かるようにする
HTML はこうします。
<p id="statusLabel">現在:OFF</p>
<button id="toggleButton">切り替え</button>
<script src="app.js"></script>
JavaScript はこうです。
const statusLabel = document.getElementById("statusLabel");
const toggleButton = document.getElementById("toggleButton");
let isOn = false;
toggleButton.addEventListener("click", function () {
if (isOn) {
isOn = false;
statusLabel.textContent = "現在:OFF";
} else {
isOn = true;
statusLabel.textContent = "現在:ON";
}
});
JavaScriptここで深掘りしたいポイントは三つです。
id で HTML を取得して、JavaScript 側に「リモコン」を持ってくること
イベント(click)の中で、変数 isOn を切り替えていること
画面の表示は、あくまで isOn の「結果」として更新していること
「状態(isOn)」と「見た目(statusLabel.textContent)」を分けて考えられると、
ボタンの動きが一気に理解しやすくなります。
「押された回数」を表示するボタン
イベントが起きた回数を数える
次は、「ボタンが何回押されたか」を表示するミニアプリです。
HTML はこうします。
<p id="countLabel">0 回押されました</p>
<button id="countButton">押してね</button>
<script src="app.js"></script>
JavaScript はこうです。
const countLabel = document.getElementById("countLabel");
const countButton = document.getElementById("countButton");
let count = 0;
countButton.addEventListener("click", function () {
count = count + 1;
countLabel.textContent = count + " 回押されました";
});
JavaScriptここで重要なのは、「イベントの外に変数を置く」というルールです。
count を addEventListener の外に書いているからこそ、
クリックされるたびに「前回の値から」増えていきます。
もし、こう書いてしまうとどうなるか。
countButton.addEventListener("click", function () {
let count = 0;
count = count + 1;
countLabel.textContent = count + " 回押されました";
});
JavaScriptこの場合、クリックのたびに count が 0 から始まるので、
表示はずっと「1 回押されました」のままです。
「イベントの外に置いた変数は“記憶”になる」
この感覚を、ここでしっかりつかんでおいてください。
3つのボタンでメッセージを切り替える
id とイベントの組み合わせを整理してみる
今度は、「3つのボタンで違うメッセージを出す」アプリです。
HTML はこうします。
<p id="message">まだ何も選ばれていません</p>
<button id="goodButton">いいね</button>
<button id="badButton">よくないね</button>
<button id="resetButton">リセット</button>
<script src="app.js"></script>
JavaScript はこうです。
const message = document.getElementById("message");
const goodButton = document.getElementById("goodButton");
const badButton = document.getElementById("badButton");
const resetButton = document.getElementById("resetButton");
goodButton.addEventListener("click", function () {
message.textContent = "あなたの評価:いいね";
});
badButton.addEventListener("click", function () {
message.textContent = "あなたの評価:よくないね";
});
resetButton.addEventListener("click", function () {
message.textContent = "まだ何も選ばれていません";
});
JavaScriptここで意識してほしいのは、「id とイベントの対応関係」です。
goodButton → click → 「いいね」メッセージ
badButton → click → 「よくないね」メッセージ
resetButton → click → 初期メッセージ
id は「HTML のラベル」、
getElementById で作った変数は「そのラベルを持つ要素のリモコン」、
addEventListener は「リモコンに“押されたときの反応”を登録するもの」
というイメージで整理しておくと、頭の中がスッキリします。
関数を使って「イベントの中身」をきれいにする
同じ処理を関数にまとめる
さっきの評価ボタンを、少しだけ整理してみます。
const message = document.getElementById("message");
const goodButton = document.getElementById("goodButton");
const badButton = document.getElementById("badButton");
const resetButton = document.getElementById("resetButton");
function setMessage(text) {
message.textContent = text;
}
goodButton.addEventListener("click", function () {
setMessage("あなたの評価:いいね");
});
badButton.addEventListener("click", function () {
setMessage("あなたの評価:よくないね");
});
resetButton.addEventListener("click", function () {
setMessage("まだ何も選ばれていません");
});
JavaScriptここで深掘りしたいのは、「関数の役割」です。
setMessage は、「メッセージを変える」という意味のかたまり
イベントの中では、「どのメッセージにするか」だけを決めている
イベントは「きっかけ」、
関数は「やりたいことのまとまり」
この分け方ができると、コードが読みやすくなります。
「押したボタンの情報」を使う書き方を体験する
event.target を使ってみる
少しだけレベルを上げて、「どのボタンが押されたか」をコード側で知る書き方も見てみます。
HTML はこうします。
<button class="colorButton" id="red">赤</button>
<button class="colorButton" id="green">緑</button>
<button class="colorButton" id="blue">青</button>
<p id="colorResult">色はまだ選ばれていません</p>
<script src="app.js"></script>
JavaScript はこうです。
const colorButtons = document.querySelectorAll(".colorButton");
const colorResult = document.getElementById("colorResult");
function handleColorClick(event) {
const clickedButton = event.target;
const colorId = clickedButton.id;
if (colorId === "red") {
colorResult.textContent = "赤が選ばれました";
} else if (colorId === "green") {
colorResult.textContent = "緑が選ばれました";
} else if (colorId === "blue") {
colorResult.textContent = "青が選ばれました";
}
}
for (let i = 0; i < colorButtons.length; i = i + 1) {
colorButtons[i].addEventListener("click", handleColorClick);
}
JavaScriptここで新しく出てきたのは二つです。
querySelectorAll で「class が colorButton の要素を全部まとめて取っている」こと
handleColorClick の引数 event から、event.target で「実際に押されたボタン」を受け取っていること
超初級の範囲では、
「id で 1 個ずつ取る」だけでも十分ですが、
「押されたボタンの情報を event から取れる」という感覚を
一度見ておくと、この先とても楽になります。
4日目のまとめ 「イベント+id で“ミニアプリ”になってきた」
今日のポイントを、ぎゅっとまとめるとこうなります。
id は HTML のラベル、getElementById で「リモコン」を手に入れる
イベントは「きっかけ」で、実際の処理はその中に書くか、別の関数に分ける
イベントの外に置いた変数は「記憶」として使える(押された回数、ON/OFF 状態など)
複数のボタンがあっても、やることは「id で取る → click を登録する」の繰り返し
必要になったら、関数で処理をまとめると、コードの意味が見えやすくなる
ここまで来ると、
「ボタンを押すアプリ」はもう“おもちゃ”ではなく、
立派な「ミニ UI」として扱えるレベルになっています。
次のステップでは、
ここに「文字の書き換え」「入力の読み取り」「条件分岐」などを
少しずつ足していくだけです。
土台は、ずっと今日までの「イベント+id」のままです。

