Day 4・ブラウザを動かす — JSでページを操作する
イベント — ユーザーの操作に反応する
addEventListenerで「クリックされたら〜する」を仕込む。Day3のアロー関数がここで生きる。カウンターの例で流れを読めるようにする。
「押されたら」を仕込む
ページは、ユーザーが何かするまではじっと待っています。クリック、文字の入力、こういったユーザーの操作を「イベント」と呼びます。JSでは「このイベントが起きたら、この処理をして」と“予約”しておけます。その予約が addEventListener です。
たとえるなら「玄関のチャイムが鳴ったら(イベント)、ドアを開ける(処理)」という段取りを、あらかじめ書いておく感じです。チャイムがいつ鳴るかはわからないけれど、鳴ったときの行動は先に決めておける。
const btn = document.querySelector("#go");
btn.addEventListener("click", () => {
console.log("押された");
});ここでアロー関数が生きる
() => { … } はDay3で学んだアロー関数です。addEventListener の2つ目に「あとで実行してほしい処理」を関数ごと渡しています。今すぐ動かすのではなく、“クリックされたそのとき”に動く。関数を「まとめて渡せる」から、こういう予約ができるのです。
よく使うイベント: click と input
1つ目の引数がイベントの種類です。"click" はクリック、"input" は入力欄に文字を打つたびに反応します。まずはこの2つを読めれば十分です。
const field = document.querySelector("#name");
field.addEventListener("input", () => {
console.log(field.value);
});textContent と value のちがい
見出しやボタンの“表示文字”は .textContent。<input> の“入力された中身”は .value で読み書きします。人形のセリフと、記入欄の書き込み、くらいの違いだと思ってください。
組み合わせ: カウンター
ここまでを合わせると、簡単なカウンターが作れます。ボタンを押すたびに数を1増やして、画面の数字を書き換える、というものです。全部書けなくて大丈夫。何をしているか読めればOKです。
let count = 0;
const btn = document.querySelector("#plus");
const num = document.querySelector("#num");
btn.addEventListener("click", () => {
count = count + 1;
num.textContent = count;
});読み方の順番はこうです。(1)最初 count は 0。(2)ボタンとカウンター表示の要素をつかむ。(3)クリックされたら count を1増やす。(4)増えた count を画面(.textContent)に反映する。この“反応して書き換える”がイベントの基本形です。
予約はページ読み込み後に
addEventListener でつかむ要素は、その時点でHTMLに存在している必要があります。要素より前にJSが走ると querySelector が null になり予約できません。<script> をbodyの終わり近くに置く、が定番の対策です。
AIにはこう聞く
「このカウンターのコードを1行ずつ説明して。addEventListener の中のアロー関数は、いつ実行されるの?」
読んでも腑に落ちない所は、AIに噛み砕いてもらいましょう。
理解度チェック
答えられれば、面接で説明できる状態に一歩近づきます。
btn.addEventListener("click", () => { … }) の () => { … } はいつ実行される?
<input> に入力された文字を読むには?
addEventListener が何をするものか、身近なたとえを使って説明してください。
記述式です。まず自分の言葉で答えを考えてから、模範解答を開いて自己採点してください。