【実践】JavaScriptでTODOアプリを作成しよう! 第3回 ボタンと処理を紐付ける

JavaScript学習ガイド

こんにちは、Reiです!

HTMLで骨組みを作り、CSSで見た目を整えました。
いよいよここからは、JavaScriptを使って
ページに「動き」をつけていきます。

今回はその最初のステップとして、
ボタンのクリックを検知する仕組みを作っていきます。


JavaScriptで「動き」をつける

ここからは、JavaScriptを使って
ユーザーの操作に反応する「動き」を実装していきます。

Webページは、

・HTML → 構造を作る
・CSS → 見た目を整える
・JavaScript → 動きをつける

という3つの役割で成り立っています。


今回はその中でもまず、
「ボタンが押されたことを検知する」 というとても基本的な仕組みを作ります。

そして、ボタンが押されたときに
メッセージを表示する処理を通して、JavaScriptが正しく動いているかを確認していきます。


この仕組みができると、

・入力された文字を取得する
・TODOを追加する
・ボタンで削除する

といった、アプリらしい機能を
少しずつ実装できるようになります。

まずは、JavaScriptを使うための準備から進めていきましょう!


準備:JSファイルを読み込む設定

JavaScriptを動かすためには、
JSファイルを作成して、HTMLから読み込む必要があります。

順番に準備していきましょう。


1. フォルダとファイルを作成する

まずは、JavaScriptを書くためのファイルを用意します。

プロジェクトのルートフォルダ直下に src フォルダ を作成し、
その中にindex.js というファイルを作成してください。

構成は次のようになります。

プロジェクトフォルダ(ルート)
├ index.html(ルート直下)

style.css(ルート直下)
└ src/(新規作成したフォルダ)
  └ index.js(これから処理を書いていく空ファイル)


2. HTMLでファイルを読み込む

作成したJSファイルを
HTMLから読み込む設定を行います。

HTMLは 上から順に読み込まれる という特徴があります。

そのため、先にHTMLの部品(ボタンなど)を読み込み、
そのあとでJavaScriptを実行させる必要があります。


そこで、<body> タグの一番下(</body>の直前)
次の1行を追加します。

【編集ファイル:index.html】

<script src="src/index.js"></script>

この設定により、

HTML → 読み込み完了

JavaScript → 実行

という順番で処理が行われるようになります。


もしJavaScriptを先に実行してしまうと、
まだHTMLのボタン要素が読み込まれていない状態になるため、

・要素が取得できない
・クリックイベントが登録できない

といった不具合が発生してしまいます。


1. HTMLのボタンに「目印」をつける

次に、JavaScriptから
特定のボタンを見つけられるようにする準備をします。

そのために使うのが id です。

【編集ファイル:index.html】

<button id="add-button">追加</button>
  • id
    特定のHTML要素を識別するための属性です。
    ページ内で一意の名前として扱われるため、JavaScriptから「この要素だけ」を正確に取得して操作できるようになります。

ページの中には、完了ボタン・削除ボタンなどの複数のボタンを用意してあります。

JavaScriptが「どのボタンが押されたのか」 を判断できるようにするため、
今回の 追加ボタンだけに専用のIDを付けておきます。


2. 実行したい「処理の塊(関数)」を用意する

次に、ボタンが押されたときに実行する処理を追加します。

まずはテストとして、
ボタンが押されたときにメッセージを表示させます。


本来はここでTODOを追加する処理を書きますが、
最初の段階では
「ボタンが押されたことをJavaScriptが検知できているか」を確認できれば十分です。

そのため、今回はシンプルにメッセージを表示する処理を用意します。

【編集ファイル:src/index.js】

/**
 * 追加ボタンが押された時に実行する関数
 */
const onClickAdd = () => {
  alert("ボタンが押されました!");
};
  • alert()
    ブラウザに小さな通知ウィンドウを表示する命令です。
    ユーザーにメッセージを伝えたいときや、処理の結果を画面に知らせたいときなどに使用されます。

このコードが実行されると、
「ボタンが押されました!」というメッセージが表示されます。

まずはこの仕組みを使って、
JavaScriptが正しく動いているかを確認します。


3. ボタンと関数を「紐付ける」

最後に、HTMLのボタンとJavaScriptの処理の
この2つを連携させます。

【編集ファイル:src/index.js】

// 追加ボタンの要素を取得
const addButton = document.getElementById("add-button");

// ボタンがクリックされたら onClickAdd を実行
addButton.addEventListener("click", onClickAdd);
  • document.getElementById
    HTML全体(document)の中から、指定した id を持つ要素 を取得する命令です。
    これによって、「追加ボタン」というHTML要素をJavaScriptから操作できるようになります。

  • addButton.addEventListener(“click”, onClickAdd)
    要素に対してユーザーの操作(イベント)を登録する命令です。
    今回の場合は、追加ボタンがクリックされたときに onClickAdd の処理を実行するよう設定しています。

このように、

HTMLから要素を取得する → その要素にイベントを登録する

という手順を行うことで、
ユーザーの操作に応じて処理を実行できるようになります。


今回の処理の流れ

ここまでのコードでは、
ユーザーが「追加」ボタンをクリックすると、次のような順番で処理が動きます。

  1. JavaScriptがHTMLの中から 追加ボタンの要素を取得する
  2. そのボタンに クリックイベントを登録する
  3. ボタンがクリックされると onClickAdd の処理が実行される
  4. 関数の中で alert が表示される

つまり、「ボタンが押されたことをJavaScriptが検知して処理を実行する」という、
Webアプリの基本的な動きができている状態です。


全体像の確認

最終的に、次のような形になっていればOKです。

  • index.html
     ページの構造と、JavaScriptの読み込み設定
  • src/index.js
     ボタンの取得と、クリックイベントの登録処理

このように、

  • HTMLに id を付ける
  • JavaScriptで 要素を取得する
  • クリックイベントを登録する

という流れを作っておくと、あとから

  • 入力欄の文字を取得する
  • TODOを追加する
  • ボタンで削除する

といった機能を、スムーズに実装できるようになります!

完成ファイル:index.html(一部抜粋)】

〜省略〜

<body>
    <div class="input-area">
      <input placeholder="TODOを入力">
      <button id="add-button">追加</button>
    </div>

〜省略〜
    
    <script src="src/index.js"></script>
  </body>
</html>

完成ファイル:src/index.js】

/**
 * 追加ボタンが押された時に実行する関数
 */
const onClickAdd = () => {
  alert("ボタンが押されました!");
};

// 追加ボタンの要素を取得
const addButton = document.getElementById("add-button");

// ボタンがクリックされたら onClickAdd を実行
addButton.addEventListener("click", onClickAdd);

まとめ

今回は、JavaScriptを使って
「ボタンのクリックを検知する仕組み」 を作りました。

\\ 今回のポイント //

<script> タグでJavaScriptファイルを読み込む
id を使って、JSから操作するHTML要素を指定する
addEventListener でクリックイベントを登録する


「ボタンが押されたら処理を実行する」

この仕組みができたことで、
JavaScriptでページを 自由に動かせる土台 が整いました。

次はいよいよ、入力欄の文字を読み取って、TODOリストに追加する という、
アプリのメイン機能を実装していきます!

コメント

タイトルとURLをコピーしました