5-7. JavaScript
課題1011. 基本
以下の手順に従って作業してください。
以下のhtmlを作成します。
<!DOCTYPE html>
<html lang="ja">
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1">
<title>課題1011 jsの基本</title>
<link href="/tutorial/1011.css" rel="stylesheet"/>
</head>
<body>
<h1>お問い合わせ</h1>
<form>
<fieldset>
<legend>お問い合わせフォーム</legend>
<label for="txtName">お名前</label>
<input type="text" name="txtName" id="txtName"/>
<br/>
<input type="button" name="btnOK" id="btnOK" value="OK"/>
</fieldset>
</form>
<script type="text/javascript" src="/tutorial/1011.js"></script>
</body>
</html>
次に、src/main/resources/static/tutorial フォルダに1011.cssというファイル名で新規ファイルを作成し、以下のように記述してください。
.isFocused {
background-color: #FF0000;
}
最後に、src/main/resources/static/tutorial フォルダに1011.jsというファイル名で新規ファイルを作成し、以下のように記述してください。
var txtName = document.getElementById("txtName");
var btnOK = document.getElementById("btnOK");
txtName.addEventListener("focus", function(event) {
event.target.classList.add("isFocused");
});
txtName.addEventListener("blur", function(event) {
event.target.classList.remove("isFocused");
});
btnOK.addEventListener("click", function(event) {
alert("入力された名前は" + txtName.value + "です。");
});
期待する動作
- お名前欄をクリックするとテキストフィールドの背景が赤くなる
- お名前欄以外をクリックすると、背景が元に戻る
- OKボタンをクリックすると「入力された名前は、xxxです。」(xxxはnameテキスト欄に入力した値)とダイアログが表示される
解説
- JavaScriptはwebサイトに動きを与える
- 動きは「ユーザが◯◯の動作をした時」などのきっかけがあって起こる。
- このきっかけを「イベント」という
- イベントのタイミングで実行される処理を「イベントリスナ」という(イベントハンドラともいう)
- 先ほど実装したJavaScriptは
- name欄のフォーカスイベント時に、isFocusedというclass属性をセットする。
- isFocusedクラスは背景を赤にするようCSSに設定されている
- name欄のフォーカスアウト時に、isFocusedクラス属性を取り除く
- btnOKのクリックイベント時にalert(ダイアログ)を表示する。
- name欄のフォーカスイベント時に、isFocusedというclass属性をセットする。
- HTMLは単なるテキストを構造化したものだが、ブラウザ及び、JavaScriptからは、オブジェクトとして見えている。
- ここでいう「オブジェクト」とは、Javaのオブジェクトと同じ意味で捉えてもらって良い
- 「構造化されている」なら「オブジェクトとして表現できる」のは当たり前
- このオブジェクト構造をDOM(Document Object Model)という。
- JavaScriptはオブジェクト化されたHTMLドキュメントを操作することが出来る
- 例1:document.getElementById("txtName") でid属性が"txtName"の要素をとり出せる
- 例2:txtName.value でvalue属性の値がとり出せる
課題1012. jQuery
以下の手順に従って作業してください。
1011.htmlのscriptタグの前に以下のように1行追加してください。
<script type="text/javascript" src="/lib/jquery/dist/jquery.js"></script>
<script type="text/javascript" src="/tutorial/1011.js"></script>
次に1011.jsを以下のように書き換えます。
$("#txtName").on("click", function() {
$(this).addClass("isFocused")
}).on("blur", function() {
$(this).removeClass("isFocused")
});
$("#btnOK").on("click", function() {
alert("入力された名前は" + $("#txtName").val() + "です。");
});
解説
- JavaScriptでDOMを操作する実装は、複雑なオブジェクト構造を地道にたどっていく作業のため、プログラムが冗長になる
- そこでライブラリの出番。商蔵では「jQuery」というライブラリを使う
- jQueryはおそらく、webアプリケーション・webサイト作成の現場において、最も普及しているJavaScriptライブラリ
- jQueryを使うと、DOM操作が簡略化できる。