JavaScriptを勉強してフロントエンジニアを目指しています!
今回は学習ロードマップの1番目「マンガJavaScript」を読んでのまとめ、アウトプットを記事にしています。
JavaScriptの学習方法
1. マンガJavaScript読む
2. 改訂新版JavaScript本格入門読む
3. Webページで使われているような部品をJSで作る(タブ、フォーム、ドロワーメニュー、スライドショー、オリジナルゲームを作る、検索ボックス、ページネーション)
4. APIリクエストで得たデータでコンテンツを作る— フロントエンドエンジニア (@terrace_tech) June 30, 2020
マンガJavaScript第18話 イベントによる処理
イベント
「イベントハンドラ」とは?
・HTML内の「イベント」を書く場所。
・「on〜」という名前の属性になっている。
・「イベントハンドラ」に対応した「イベント」が起こると、その処理が実行される。
コードで書いてみるとこんな感じです。
<div onClick="alert('クリックしたよ!');alert('もっとクリックして!');"> クリックしてね </div>
①「onClick」属性を設定する。
②属性の値としてプログラムを書く。
③そのオブジェクトがクリックされる。
④プログラムを実行
マンガに登場する長めのプログラムをみてみよう
このプログラムでは3つのタグの「イベントハンドラ」に関数を指定することで「<head>」タグ内の「<script>」タグに書いた関数を呼び出します。
3種類のタグ |
①<body onLoad=”action0();”> |
②<div id=”target1″ onClick=”action1();”>目標1</div> |
③<div onMouseOver=”action2(this);”>目標2</div> |
<!DOCTYPE html> <html lang="ja"> <head> <meta charset="UTF-8"> <script> function action0() { // 『body』の読み込みが終わった直後 alert("実行開始!"); } var count1 = 1; function action1() { // 『<div id="target1">』がクリックされた時 var ele = document.getElementById("target1"); ele.innerHTML = count1 + "回クリック"; count1 ++; } var count2 = 1; function action2(ele) { // 『<div onMouseOver="~">』にマウスが乗った時 // 引数『this』は2番目の『<div>』 ele.innerHTML = count2 + "回マウスオーバー"; count2 ++; } </script> </head> <body onLoad="action0();"> <div id="target1" onClick="action1();">目標1</div> <div onMouseOver="action2(this);">目標2</div> </body> </html>
①「<body onLoad=””>」の場合
「<body>」タグ部分の読み込みが終了した際呼び出しています。
今回は「action0」関数を呼び出しています。②「<div id=”target1″ onClick=””>目標1</div> 」の場合
「div」要素内の文字列「目標1」がクリックされた際呼び出しています。
今回は「action1」関数を呼び出しています。
「action1」関数内では
「id」属性が「target1」の要素の中身を書き換えています。
(ここではクリックした要素自身の「id」を指定)
結果として「目標1」という文字列が書き換わっています。③「<div id=onMouseOver=”action2(this);”>目標2</div>」の場合
「div」要素内の文字列「目標2」がの上にマウスが乗った際呼び出しています。
今回は「action2」関数を呼び出しています。
「action2」関数内では
引数に「this」をとっています。この際の「this」はイベントが呼び出された「<div>」タグ自身の要素をを表します。
「<function action2(ele)」という関数の引数「(ele)」はイベント呼び出し元の「<div>」タグと同じになります。
変数「ele」のプロパティ「innerHTML」を変更することによって「目標2」という文字列を書き換えています。
イベントの詳細や使い方について
属性 | 発生タイミング |
onClick | クリックされた時 |
onMouseOver | マウスカーソルが乗った時 |
onMouseOut | マウスカーソルが離れた時 |
onLoad | Webページが読み込まれた直後 |
onUnload | 他のページに移動する直前 |
onFocus | フォームの部品などが操作対象になった時 |
onBlur | フォームの部品などが操作対象から外れた時 |
onChange | フォームの部品の内容が変更された時 |
onSubmit | フォームの実行がなされた時 |
「イベント」をプログラムから発生させる時によく使うものを表にしました
式 | 発生イベント |
element.click() | クリック |
element.focus () | オブジェクトを操作対象にする |
element.blur() | オブジェクトw操作対象から外す |
(フォーム).submit() | フォームを実行する |
「イベント」の詳しい情報を得る
「(window.)event」オブジェクトとは?
→イベントの情報が格納されている場所
「イベント」が発生したタイミングで「イベント」の情報を入手できます。
よく使うプロパティを表にまとめました。
式 | 意味 |
event.type | イベントの種類(例:クリック時は「click」) |
event.clientX | イベントが発生したY座標(Webページ内) |
event.clientY | イベントが発生したX座標(Webページ内) |
event.screenX | イベントが発生したX座標(デスクトップ内) |
event.screenY | イベントが発生したY座標(デスクトップ内) |
プログラムを書いていきます。
<!DOCTYPE html> <html lang="ja"> <head> <meta charset="UTF-8"> </head> <body> <a href="#" onclick="alert(event.type); return false;"> イベント種類 </a><br> <a href="#" onclick="alert(event.clientX + ' ' + event.clientY); return false;"> クライアント座標 </a><br> <a href="#" onclick="alert(event.screenX + ' ' + event.screenY); return false;"> スクリーン座標 </a><br> </body> </html>
・1番目の「イベント種類」をクリックすると「イベント」の種類と表示されます。(この場合は「click」)
・2番目の「クライアント座標」をクリックするとWebページ内でのイベントが発生した、「Y座標」「X座標」が表示されます。
・3番目の「スクリーン座標」をクリックするとデスクトップ内でのイベントが発生した、「Y座標」「X座標」が表示されます。
フォームのキャンセル
「return false;」は、フォームによるデータの送信処理をキャンセルする場合にも使用します。
実際にプログラム内で使用してみましょう!
フォームの入力内容を確認し、フォームが空の場合にフォームの実行を停止するプログラムを書いていきます。
<!DOCTYPE html> <html lang="ja"> <head> <meta charset="UTF-8"> </head> <body> <form method="get" action="https://www.google.com/search" onSubmit="return checkValue(this.q);" > 検索文字列: <input type="text" name="q" value="" size=30> <input type="hidden" name="ie" value="UTF-8"> <input type="submit" value="実行"> </form> <script> function checkValue(element) { if (element.value == "") { alert("文字列が空です"); return false; } } </script> </body> </html>
結果
[プログラムの動き]
①「submit」(実行)ボタンがクリックする
②送信処理の前に「form」タグの「onSubmit=”〜”」が実行される「this.q」の内容
「this」(今回はフォーム)の子要素の中で「name」属性の値が「q」の要素という意味。
「this.q」の「value」属性の値が空の場合は「return false;」で処理をキャンセル
「onSubmit」の実体が、以下のようになっているので「return」が抜けていると動作しません。
// 「checkValue(this.q);」の場合 form.onSubmit = function(){checkValue(this.q);} // 「return checkValue(this.q);」の場合 form.onSubmit = function(){return checkValue(this.q);}
①「checkValue(this.q);」の場合
「onSubmit」の中で処理が行われるだけで戻り値が何も設定されていないため
「onSubmit」の戻り値はありません。
②「return checkValue(this.q);」の場合
「checkValue」関数の戻り値を、「onSubmit」メソッドの「return」の値として利用しています。
「onSubmit」の戻り値は「checkValue」関数の戻り値になります。
①、②の理由があるため「return」をつけた場合のみ「onSubmit」の戻り値として「false」を戻せることになります。
<a>タグに記述するJavaScript
「href」属性にも「on」で始まるイベント系の属性と同じようにプログラムを直接かけます。
<a href="javascript:alert('クリック!')">クリックしてね</a>
上記のようなプログラムを書くと、「クリックしてね」をクリックした際にダイアログが出てくるようになります。
マンガJavaScript18話まとめ
・<a>タグに記述するJavaScript
Twitterフロントエンジニア(@terrace_tech)のフォローは👇