8.4 イベント処理

ユーザーの操作(クリック、キー入力など)に反応する処理を学びます。

8.4.1 addEventListener の使い方

addEventListener は、要素に対してイベントリスナーを登録するメソッドです。

基本構文

要素.addEventListener("イベント名", function() {
    // イベント発生時の処理
});

8.4.2 イベントオブジェクトと preventDefault

イベントが発生すると、そのイベントの情報を持つ「イベントオブジェクト」が自動的に生成されます。

button.addEventListener("click", function(event) {
    console.log(event.target); // クリックされた要素
    console.log(event.type); // "click"
});

preventDefault

フォームの送信やリンクのページ遷移など、ブラウザのデフォルト動作をキャンセルします。

form.addEventListener("submit", function(event) {
    event.preventDefault(); // フォーム送信をキャンセル
    // 独自の処理を実行
});

8.4.3 イベント処理のプログラム

ソースフォルダ:public/ch08

ファイル名:event-handler.js

➢ event-handler.html

前の項で作った ch08/dom-style.html をコピーし、ch08 にペーストしてください。その際に、ファイル名を event-handler.html に変更します。ファイル内の dom-style.html や dom-style.js の記述も、event-handler.html や event-handler.js に修正します。さらに、ファイル内の記述を以下のように修正します。

<!DOCTYPE html>
<html lang="ja">
<head>
    <meta charset="UTF-8">
    <title>JavaScriptの練習: event-handler.jsを実行中</title>
</head>

<body>
    <h1>イベント処理の練習</h1>
    
    <input type="text" id="nameInput" placeholder="名前を入力">
    <button id="greetBtn">挨拶する</button>
    <p id="output"></p>
    
    <script src="event-handler.js"></script>
</body>
</html>

➢ event-handler.js

// event-handler.js

// 要素を取得
const input = document.querySelector("#nameInput");
const button = document.querySelector("#greetBtn");
const output = document.querySelector("#output");

// ボタンクリック時の処理
button.addEventListener("click", function(event) {
    // 入力された名前を取得
    const name = input.value;
    
    // 名前が空でないかチェック
    if (name === "") {
        alert("名前を入力してください");
        return;
    }
    
    // 挨拶メッセージを表示
    output.textContent = `こんにちは、${name}さん!`;
    
    // コンソールにイベント情報を表示
    console.log("クリックされた要素:", event.target);
    console.log("イベントの種類:", event.type);
});

// Enter キーでも挨拶できるようにする
input.addEventListener("keydown", function(event) {
    if (event.key === "Enter") {
        button.click();    // ボタンのクリックイベントを発火
    }
});

実行結果

入力フィールドに名前を入力してボタンをクリック(または Enter キー)すると、「こんにちは、○○さん!」と表示されます。

解説

4 行目から 6 行目で、必要な要素を取得しています。

4: const input = document.querySelector("#nameInput");
5: const button = document.querySelector("#greetBtn");
6: const output = document.querySelector("#output");

9 行目から 25 行目で、ボタンがクリックされたときの処理を定義しています。

11 行目では、input 要素の value プロパティを使って、入力された値を取得しています。

11: const name = input.value;

14 行目から 17 行目では、名前が空の場合にアラートを表示し、処理を中断しています。

14: if (name === "") {
15:     alert("名前を入力してください");
16:     return;
17: }

20 行目では、p タグの中に挨拶メッセージを設定しています。

20: output.textContent = `こんにちは、${name}さん!`;

23 行目と 24 行目では、イベントオブジェクトから情報を取得してコンソールに表示しています。

23: console.log("クリックされた要素:", event.target);
24: console.log("イベントの種類:", event.type);

28 行目から 32 行目では、入力フィールドで Enter キーが押されたときに、ボタンのクリックイベントを発火させています。

28: input.addEventListener("keydown", function(event) {
29:     if (event.key === "Enter") {
30:         button.click(); // ボタンのクリックイベントを発火
31:     }
32: });