イベント

反応しないページは単なるドキュメントです。ボタンをクリックしたときに何かが起こるようにしたい、検索ボックスに入力したい、またはフォームを送信したいという瞬間、「これが起こったら、このコードを実行する」と言う方法が必要です。それがイベントです。このチャプターでは、ユーザーが何をするかを聞いて、それに応答することについてです。
イベントをリッスンする
**イベント**とは、ページで起こることです:クリック、キー入力、フォーム送信。それに応答するために、要素を選び、関心のあるイベント名を指定し、それが起こったときに実行する関数を渡します。
その関数をハンドラーと呼びます。それを接続するメソッドはaddEventListenerです:
const button = document.querySelector(".buy-button");
button.addEventListener("click", () => {
console.log("誰かが購入をクリックしました");
});左から右に読んでください:このボタンで、"click"をリッスンして、それが起こったら、この関数を実行してください。ハンドラーは一度だけでなく、イベントが起こるたびに実行されます。3回クリックすると、3回実行されます。
ハンドラーは通常の関数であり、それらを接続する要素はDOMから来ます。要素を選択して関数を書くことができれば、ユーザーがそれに何をするかに応答できます。
"click"のような文字列として指定し、addEventListenerに実行する関数を与えます。その関数はハンドラーであり、一度だけでなく、イベントが起こるたびに実行されます。このメソッド1つは、ページがあなたに応答してすることのほとんどすべての背後にあります。 イベントオブジェクト
ブラウザーがハンドラーを実行するとき、1つの情報を渡します:何が起こったかを説明する**イベントオブジェクト**。通常eventという名前のパラメーターを与えてハンドラーでキャッチします:
const button = document.querySelector(".buy-button");
button.addEventListener("click", (event) => {
console.log(event.target); // クリックされた要素
});最も便利な部分はevent.target:イベントが起こった要素。ボタンをクリックした場合、event.targetがそのボタンです。再度選択する必要はありません。イベントはすでにどこから来たかを教えています。
eventという名前のパラメーターを与えて取得し、イベントオブジェクトを受け取ります。最も到達するのはevent.target、イベントが起こった要素です。再度選択する必要はありません。イベントはすでにどこから来たかを知っています。 一般的なイベント
少数のイベントがあなたが構築する大部分をカバーします:
click:ユーザーが何かをクリックまたはタップします。input:テキストフィールドの値が入力時に変わります。submit:フォームが送信されます。keydown:キーが押されます。
厄介なのはsubmitです。デフォルトでは、フォームを送信するとページがリロードされ、JavaScriptが行っていたことがすべて消えます。それを止めるには、ハンドラー内でevent.preventDefault()を呼び出します:
const form = document.querySelector("form");
form.addEventListener("submit", (event) => {
event.preventDefault(); // ページがリロードするのを止める
console.log("フォームが送信されました、ページはそのままです");
});click、input、submit、keydownです。覚えるのはsubmit:フォームはデフォルトでページをリロードするため、ハンドラーでevent.preventDefault()を呼び出してそれを止めて、制御を保つ。それを見落とすと、ページがあなたから更新されます。これは初めてのときは混乱しています。 イベントがここから行くところ
イベントはページがリッスンする方法です。要素を選び、何を気にするかに名前を付け、それが起こったときに関数を実行し、進むにつれてイベントオブジェクトから詳細を読みます。ほぼあらゆるインタラクティブ機能はそのループから構築されています。
自然な次のステップは、ハンドラーで遅いことをすることです。フォームをサーバーに送信したり、ページを凍結させずに新しいデータを読み込んだりするなど。これがasyncコードの目的であり、次のチャプターです。オブジェクトに保つアイテムのリストのような構造化されたデータに達するハンドラーも、あなたがすでに知っているものに依存しています。

