JS初めてのJavaScript

Day 4ブラウザを動かす — JSでページを操作する

イベント — ユーザーの操作に反応する

addEventListenerで「クリックされたら〜する」を仕込む。Day3のアロー関数がここで生きる。カウンターの例で流れを読めるようにする。

「押されたら」を仕込む

ページは、ユーザーが何かするまではじっと待っています。クリック、文字の入力、こういったユーザーの操作を「イベント」と呼びます。JSでは「このイベントが起きたら、この処理をして」と“予約”しておけます。その予約が addEventListener です。

たとえるなら「玄関のチャイムが鳴ったら(イベント)、ドアを開ける(処理)」という段取りを、あらかじめ書いておく感じです。チャイムがいつ鳴るかはわからないけれど、鳴ったときの行動は先に決めておける。

JAVASCRIPT
const btn = document.querySelector("#go");
btn.addEventListener("click", () => {
  console.log("押された");
});
ボタンが click されたら実行する処理を予約する

ここでアロー関数が生きる

() => { … } はDay3で学んだアロー関数です。addEventListener の2つ目に「あとで実行してほしい処理」を関数ごと渡しています。今すぐ動かすのではなく、“クリックされたそのとき”に動く。関数を「まとめて渡せる」から、こういう予約ができるのです。

よく使うイベント: click と input

1つ目の引数がイベントの種類です。"click" はクリック、"input" は入力欄に文字を打つたびに反応します。まずはこの2つを読めれば十分です。

JAVASCRIPT
const field = document.querySelector("#name");
field.addEventListener("input", () => {
  console.log(field.value);
});
入力するたびに、今の入力内容(.value)を表示する

textContent と value のちがい

見出しやボタンの“表示文字”は .textContent。<input> の“入力された中身”は .value で読み書きします。人形のセリフと、記入欄の書き込み、くらいの違いだと思ってください。

組み合わせ: カウンター

ここまでを合わせると、簡単なカウンターが作れます。ボタンを押すたびに数を1増やして、画面の数字を書き換える、というものです。全部書けなくて大丈夫。何をしているか読めればOKです。

JAVASCRIPT
let count = 0;
const btn = document.querySelector("#plus");
const num = document.querySelector("#num");
btn.addEventListener("click", () => {
  count = count + 1;
  num.textContent = count;
});
押すたびに count が増え、#num の表示が更新される

読み方の順番はこうです。(1)最初 count は 0。(2)ボタンとカウンター表示の要素をつかむ。(3)クリックされたら count を1増やす。(4)増えた count を画面(.textContent)に反映する。この“反応して書き換える”がイベントの基本形です。

予約はページ読み込み後に

addEventListener でつかむ要素は、その時点でHTMLに存在している必要があります。要素より前にJSが走ると querySelector が null になり予約できません。<script> をbodyの終わり近くに置く、が定番の対策です。

AIにはこう聞く

「このカウンターのコードを1行ずつ説明して。addEventListener の中のアロー関数は、いつ実行されるの?」

読んでも腑に落ちない所は、AIに噛み砕いてもらいましょう。

理解度チェック

答えられれば、面接で説明できる状態に一歩近づきます。

Q1

btn.addEventListener("click", () => { … }) の () => { … } はいつ実行される?

Q2

<input> に入力された文字を読むには?

Q3

addEventListener が何をするものか、身近なたとえを使って説明してください。

記述式です。まず自分の言葉で答えを考えてから、模範解答を開いて自己採点してください。