- ボタンを押した瞬間、実は4つの処理が起きている
- クリックは「信号」として扱われる
- JavaScriptは“待っている”
- DOMとは「画面の設計図」
- さらに裏では通信が走ることもある
- よくある勘違い:ボタンが処理しているわけではない
- 実際に起きるトラブル
- リスクと注意点
- ボタンの正体
ボタンを押した瞬間、実は4つの処理が起きている
Webページのボタンを押すと、画面が変わったり、メッセージが表示されたりします。
このとき、JavaScriptが「その場で考えて動いている」と思われがちですが、実際には違います。
ボタンを押したときの動きは、あらかじめ準備されています。
正確には、次の流れです。
1. クリックが検出される
2. ブラウザがイベントを通知する
3. JavaScriptが呼び出される
4. 画面(DOM)が書き換わる
つまり、ボタンはきっかけに過ぎません。
本体は「イベント処理」という仕組みです。
クリックは「信号」として扱われる
ブラウザは常にユーザーの操作を監視しています。
- マウスクリック
- キー入力
- スクロール
- タッチ操作
これらはすべて「イベント」という信号になります。
ボタンを押したとき、ブラウザは「clickイベントが発生した」と判断します。
ここではまだJavaScriptは実行されていません。
JavaScriptは、イベントが起きたときだけ呼び出されます。
JavaScriptは“待っている”
次のコードを見てください。
const button = document.getElementById('send'); button.addEventListener('click', function() { alert('送信されました'); });
このコードは、ボタンが押された瞬間に初めて実行されます。
ページを開いた直後に動くわけではありません。
重要なのは、JavaScriptは常に動作しているのではなく
イベントを待機しているという点です。
これをイベントリスナーと呼びます。
DOMとは「画面の設計図」
では、JavaScriptは何を書き換えているのでしょうか。
それがDOMです。
DOMは、ブラウザがページを管理するための内部データです。
HTMLは単なる文字列ですが、ブラウザはそれを「部品の集合」として解釈します。
例:
- 見出し要素
- 段落要素
- 入力欄
- ボタン
JavaScriptは、この部品に対して命令を出します。
document.getElementById('msg').textContent = '完了しました';
これは「msgという部品の文字を変更しろ」という命令です。
画面を再読み込みしているわけではありません。
画面の中身だけを差し替えています。
さらに裏では通信が走ることもある
最近のWebサイトでは、ボタンを押すとサーバ通信が発生することがあります。
fetch('/api/login', { method: 'POST' }).then(res => res.json()) .then(data => { document.getElementById('result').textContent = data.message; });
この処理では、ボタンが押された後に
- サーバへデータ送信
- 応答を受信
- 画面更新
が行われます。
ページは移動していませんが、実際には通信が起きています。
ログインフォームや検索候補、いいねボタンの多くがこの仕組みです。
よくある勘違い:ボタンが処理しているわけではない
初心者がよく誤解する点があります。
「ボタンを押すとボタンが処理する」という考え方です。
実際は違います。
ボタンはただのHTML要素です。
処理を持っていません。
処理を持っているのはJavaScriptであり、
ボタンは「イベントを発生させるスイッチ」に過ぎません。
この理解がないと、次のような疑問が出ます。
> なぜボタンを作っただけでは動かないのか
理由は、イベントに対する処理が登録されていないからです。
実際に起きるトラブル
ボタンが反応しない原因の多くは、JavaScriptのバグではありません。
典型例があります。
document.getElementById('send').addEventListener('click', handler);
もしHTMLがまだ読み込まれていない状態でこのコードが実行されると、
ボタンは存在しないため登録に失敗します。
その結果、クリックしても何も起きません。
対策は次のいずれかです。
window.addEventListener('DOMContentLoaded', function(){ document.getElementById('send').addEventListener('click', handler); });
または
<script src="app.js" defer></script>
これは「HTMLの準備が終わってから実行せよ」という意味です。
リスクと注意点
イベント処理は便利ですが、登録しすぎると問題が起きます。
- 同じイベントを何度も登録する
- 不要な監視を残す
- メモリを消費する
特にSPA(画面遷移しないサイト)では、イベントの解除忘れが原因でページが重くなることがあります。
JavaScriptは目に見えない部分で積み重なります。
そのため「動いているからOK」と考えると、後から急に重くなることがあります。
ボタンの正体
ボタンを押すと何かが起きる。
この「当たり前」の裏側では、常に同じ流れが動いています。
ユーザー操作 → イベント発生 → JavaScript実行 → DOM変更
つまりボタンは命令を持っているのではなく、
命令を呼び出すトリガーです。
この構造が理解できると、Webページの挙動を「見た目」ではなく「処理の流れ」で捉えられるようになります。
JavaScriptを学ぶ最初の一歩は、文法ではなく、この流れを理解することです。