JavaScript演習

JavaScript 演習2
1
前回の補足説明+復習
• IEにおけるJavaScriptのデバッグ方法
• prompt関数
• 演習問題1
IEにおけるJavaScriptのデバッグ方法
1. ツール→インターネットオプションメニューを実行
2. 詳細設定タブの「スクリプトエラーごとに通知を表示する」をチェック
「スクリプトのデバッグを使用しない(Internet Explorer)」のチェックを
はずす
3. IEを再起動
IEを再起動
prompt関数
• prompt(引数)-引数をメッセージとして表示し,ユーザから
の入力情報(文字列)を取得する関数
• ex9.html
var value = prompt("値を入力してください.");
alert(value);
document.write('<h1>prompt関数</h1>');
document.write('<h1>' +value + '</h1>');
4
演習問題1
• prompt関数とdocument.write関数を用いて
,ユーザから入力されたテキスト,文字の色,
文字のサイズ(%)に応じて,表示内容を変化
させるJavaScriptプログラムを書きなさい
ヒント
上記の例をタグで表現すると・・・
<p style=‘color:red; fontsize:200%;'>Hello, World</p> 5
本日の内容
• 条件分岐
• 繰り返し
• parseInt関数とparseFloat
関数
• 演習2
• document.getElementById
関数
• 演習3
•
•
•
•
•
•
イベント処理
基本的なフォーム
テキストボックスの入力値の取得
配列
DOM(Document Object Model)
ラジオボタンで選択された値の取
得
• リスト(コンボ)ボックスで選択され
た値の取得
• チェックボックスで選択された値の
取得
• 提出課題
条件分岐
• ex10.html, ex11.html
if (条件1) {
• if文
文1;
} else if (条件2) {
文2;
・・・・・
} else {
文N;
}
条件の部分には,
論理値(true or false)
が入る
• switch文
マッチする選択肢が
なかったときに実行
switch (テストデータ) {
case マッチデータ1:
文1;
break;
case マッチデータ2:
文2;
break;
default:
文3;
break;
}
break文を使って他の選択肢が
実行されないようにする
7
繰り返し
• ex12.html
• for文 for (初期化; テスト; 更新) {
アクション;
}
for (var i=0;i<5;i++) {
document.write("<p>" + i + "</p>");
}
• while文
初期化;
while (テスト) {
アクション;
更新;
}
var i = 0;
while(i< 5){
document.write("<p>" + i + "</p>");
i++;
}
8
parseInt関数とparseFloat関数
• parseInt(引数)
– 引数で文字列を渡すと数値に変換
• parseFloat(引数)
– 引数で文字列を渡すと浮動小数点に変換
• ex13.html
9
演習問題2
• “Hello!”という文字列をユーザが入力した数だけ表
示するJavaScriptプログラムを作成しなさい
• 行数を5で割った余りが1の場合には赤色,2の場
合には緑色,3の場合には黄色,4の場合には黒,0
の場合には青色,さらに,3の倍数の場合には
200%の大きさで”Hello!”を表示しなさい
ヒント
1%5=1, 2%5=2, 3%5=3 ・・・
<p style=‘color:red;>Hello!</p>
<p style=‘color:green;>Hello!</p>
<p style=‘color:yellow;>Hello!</p>
10
document.getElementById関数
• document.getElementById(引数)
– 引数で指定した要素オブジェクトを得る
• document.getElementById(引数).innerHTML
– 引数で指定した要素オブジェクトのHTMLを得る
• document.getElementById(引数).style.CSSプロパティ
– 引数で指定した要素オブジェクトのCSSプロパティを得る
– CSSプロパティ名は,基本的には「ハイフン(-)」を除去し,ハイ
フンの後の文字を大文字に変換したものを用いる
– 参考: http://codepunk.hardwar.org.uk/css2js.htm
11
オブジェクトのイメージ
<body>
<body>
<h1
<h1
id="id1“
id="id1">Hello</h1>
style=‘color: red’>Hello, World</h1>
</body>
</body>
document.getElementById(“id1”)
H1要素のオブジェクト
属性:
色 (style.color): black
HTMLテキスト (innerHTML): Hello
document.getElementById(“id1”).style.color = ‘red’;
document.getElementById(“id1”).innerHTML = ‘Hello, World’;
document.getElementById関数
ex14.html
JavaScript
function test() {
var h1Value = document.getElementById("id1").innerHTML;
alert(h1Value);
document.getElementById("id1").innerHTML = prompt('');
var item1 = document.getElementById("item1").innerHTML;
alert(item1);
var item2 = document.getElementById("item2").innerHTML;
alert(item2);
var item1 = document.getElementById("item3").innerHTML;
alert(item3);
document.getElementById("divid").innerHTML = "テスト";
document.getElementById("divid").style.color = "red";
document.getElementById("divid").style.fontSize = "200%";
document.getElementById("divid").style.backgroundColor = "black";
}
HTML
onload=‘関数名’
<body onload='test()'>
<h1 id="id1">document.getElementById関数</h1>
ドキュメントが完全に
読み込まれた後に指
定した関数を呼び出す
<ul>
divは「division(区画)」の略
<li id="item1">項目1</li>
<li id="item2">項目2</li>
<li id="item3">項目3</li>
</ul>
<div id="divid"></div>
</body>
他の要素をまとめて,構造化する際に
用いられる
JavaScriptで操作する対象になる
13
演習問題3
• div要素にid属性を指定し,JavaScriptプログラムに
よりdiv要素のCSSプロパティを設定し,以下の長方
形を表示するプログラムを作成せよ
<div style="position:absolute;
top:40; left:40;
width:150; height:250;
background-color:#0000FF;
border: thick solid red;
visibility: visible;">
</div>
ヒント
JavaScript
HTML
function showRect() {
document.getElementById(“rect”).style.・・・・
}
<body onload=“showRect()”>
<div id=“rect”></div>
14
</body>
イベント処理
• JavaScriptでは、ユーザからの入力があるとWebブラウザがイベントを
生成
– 例えば、キーボードを押したり、マウスを動かしたりクリックしたりするなど
様々な場面でイベントが発生する
あるイベントが発生した際に、そのイベントに対するイベントハンドラを定
義しておけば、インタラクティブなページを作ることが可能
イベントハンドラ
発生契機
サポートするHTML要素
onblur
要素が入力フォーカスを失った時
<button>, <input>, <label>,
<select>, <textarea>,<body>
onchange
入力フォーカスが移された時と要素 <input>, <select>, <textarea>
の値が変わった時
onclick
マウスを一回クリックした時
大半の要素
onmouseover
マウスが要素の上に移動した
大半の要素
onkeydown(up)
ユーザが何かキーを押した
フォーム要素と<body>
onload
ページが読み込まれた時
body要素と共によく用いられる
基本的なフォーム
•
テキスト
– input要素のtype属性がtext
•
ラジオボタン
– input要素のtype属性がradio
– name属性の値を共通にすることでグループ化できる
– value属性で値を指定
•
メニュー(リストボックスとコンボボックス)
– select要素とoption要素
– select要素のsize属性の値が1の場合
にはコンボボックス,2以上の場合には
リストボックス
– option要素のvalue属性で値を指定
•
チェックボックス
– input要素のtype属性がcheckbox
– value属性で値を指定
•
テキストエリア
– textarea要素
– rows属性で行数,cols属性で列数を表す
•
ボタン
– input要素のtype属性がbutton(または,submit, reset)
<form>
<input type=“”>XXX
<select>
<option>~
</select>
<textarea></textarea>
</form>
テキストボックスの入力値の取得
• テキストボックス内に入力したデータを、
ボタンが押されたらdiv要素に出力
• ex15.html
17
テキストボックスの入力値の取得
JavaScript
function getValue() {
var text = document.getElementById("input").value;
document.getElementById("output").innerHTML = text;
}
function checkValue() {
var text = document.getElementById("input").value;
if (text == "") {
alert("文字を入力してください.");
} else {
alert("OK");
}
}
HTML
<form>
文字を入力してください。 <br />
<input type="text" id="input“ onkeyup=“getValue()" />
<input type=“button” value=“値の確認" onclick=“checkValue()" />
</form>
<div id="output"></div>
演習問題4
• テキストボックスを2つ作成し,入力値の加算
結果をdiv要素に出力せよ
– parseFloat関数を利用すること
– 余力があれば,数値かどうかのチェックも行うこと
• isNaN(Not a Number)関数を利用すると,入力値が数
値かどうかを判別可能 (数値でない場合にtrueを返す)
演習問題4は提出する必要は
ありません.
演習問題4
• さらに余力がある人は,テキストボックスの横のdiv要素に
以下のメッセージを出力するようにしてみてください
– テキストボックスが空の場合には「数値を入力してください」
– テキストボックスが数値以外の場合には「数値ではありません」
– テキストボックスが数値の場合には「OK」
• ex15.htmlのonkeyupイベントハンドラを用いること
• メッセージは上記のとおりでなくても良い
配列
• ex16.html
• 配列の生成
var a = new Array();
a[0] = 1.2;
a[1] = "JavaScript";
a[2] = true;
a[3] = {x:1, y:3};
var a =
[1.2, "JavaScript", true, {x:1, y:3}];
オブジェクトの型が異なっても格納することができる
• 配列のサイズを指定するときは
var a = new Array(10);
• 連想配列 配列の添字を文字列にすることができる
a[score] = "88点";
21
DOM(Document Object Model)
• 文書のトップであるDocumentオブジェクトか
ら下位の階層の構造を表すモデル
「JavaScript DOMリファレンス」
http://www.openspc2.org/JavaScript/JavaScript_DOM/
22
DOM関数の例
• ex17.html
• document.getElementById(id)
– 引数に指定したidを持つDOMオブジェクトを返す
• document.createElement(要素)
– 引数で指定したHTML要素を作成する
• オブジェクト.setAttribute(属性名, 値)
– オブジェクトの属性に値をセットする
• オブジェクト.appendChild(オブジェクト)
– 指定したオブジェクトにオブジェクトを追加する
DOM関数の例
JavaScript
function domTest() {
var divObj = document.getElementById("dom_test");
var h1Obj = document.createElement("h1");
h1Obj.setAttribute("style", "color: navy;");
h1Obj.innerHTML = "Hello, World!";
divObj.appendChild(h1Obj);
var colorArray = ["red", "blue", "green", "yellow"];
for (var i = 0; i < colorArray.length; i++) {
var pObj = document.createElement("p");
pObj.innerHTML = "DOMを用いて追加された段落" + i;
pObj.style.fontSize = "200%";
pObj.style.color = colorArray[i];
divObj.appendChild(pObj);
}
}
HTML
<div id="dom_test"></div>
ラジオボタンで選択された値の取得
• ex18.html
ラジオボタンで選択された値の取得
JavaScript
function getRadioValue(){
var radioForm = document.getElementById("radio_form");
for (var i = 0; i < radioForm.length; i++) {
var radioButton = radioForm.elements[i];
if (radioButton.checked) {
document.getElementById("output").innerHTML = radioButton.value;
break;
}
}
}
HTML
<form id="radio_form“ onclick=“getRadioValue()”>
あなたの性別を教えて下さい.<br/>
<input type=“radio” name= "性別" value="男" checked="checked" />男
<input type=“radio” name= "性別" value="女" />女
</form>
<div id="output">男</div>
演習問題5
• ex18.htmlを元に,男を選択した場合には青
色マークを女を選択した場合には赤色マーク
を出力するようにせよ
– ヒント:
<div id=“mark” style=“width: 15; height: 3; background-color: blue”>
を
<div id=“output”>男</div>
の前に挿入
演習問題5は提出する必要は
ありません.
リスト(コンボ)ボックスで
選択された値の取得
• ex19.html
リスト(コンボ)ボックスで
選択された値の取得
JavaScript
function getSelectValue(){
var html = "<ul>";
var selectElement = document.getElementById("select_element");
for (var i = 0; i < selectElement.length; i++) {
var item = selectElement.options[i];
if (item.selected) {
html += "<li>" + item.value + "</li>";
}
}
html += "</ul>";
document.getElementById("output").innerHTML = html;
}
HTML
<form>
<select id="select_element" name=“animal" size="4" onclick="getSelectValue()" multiple>
<option value="ペンギン">ペンギン</option>
<option value="トラ">トラ</option>
コンボボックスに変更したい場合は,
<option value="ライオン">ライオン</option>
select要素のsize属性の値を1にし,
<option value="アザラシ">アザラシ</option>
multipleを削除すれば良い.
</select>
(multipleを付けるとリストボックスで
</form>
複数項目を選択できるようになる.)
<div id="output"></div>
チェックボックスで
選択された値の取得
• ex20.html
チェックボックスで
選択された値の取得
JavaScript
function getCheckBoxValue(){
var html = "<ul>";
var checkboxForm = document.getElementById("checkbox_form");
for (var i = 0; i < checkboxForm.length; i++) {
var checkbox = checkboxForm.elements[i];
if (checkbox.checked) {
html += "<li>" + checkbox.value + "</li>";
}
}
html += "</ul>";
document.getElementById("output").innerHTML = html;
}
HTML
<form id="checkbox_form" name="animal" onclick="getCheckBoxValue()">
<input type="checkbox" value="ペンギン" />ペンギン
<input type="checkbox" value="トラ" />トラ
<input type="checkbox" value="ライオン" />ライオン
<input type="checkbox" value="アザラシ" />アザラシ
</form>
<div id="output"></div>
提出課題
32
課題1(基本)
テキストボックスに幅と高さを入力し,背景色をラジオ
ボタンから選択し,ボタンを押すと,div要素に入力した
値に応じた矩形が表示されるようにする
ボタンを押すと
入力値に応じて
矩形が変化
課題1(発展)
発展課題(例)
余力がある人は,さらに,表示する
矩形の個数や枠の幅や色も指定
できるようにしてみましょう.
課題2
アンケート項目の内容を整形して画面に出力
必須
入力情報を画面に表示
1. テキストボックスとボタンを
用いて,div要素に入力内
容を整形して表示する
2. onclick以外のイベントハン
ドラを最低1つは用いること
発展課題(例)
1. 入力値のチェック
(空だったらアラートなど)
2. <table>タグを利用して出力
3. チェックボックスの活用
4. リストボックスの活用
レポート1
• 授業中に行った演習問題1,2,3を以下のアドレ
スにメールで提出
– 提出先
• To:[email protected]
– 提出期限
• 6月3日(金)13:00まで :次回授業前まで
– メールの件名: 学籍番号_氏名_JS演習1
• ファイル名は以下のようにすること
– 学籍番号_氏名_JS演習問題1.html
– 学籍番号_氏名_JS演習問題2.html
– 学籍番号_氏名_JS演習問題3.html
学籍番号、アンダーバーは必ず半角でお願いします
36
レポート2
締切
6月24日(金)23:59 までにメールを送信
 メール宛先
 To:[email protected]
 メールの件名
 学籍番号_氏名_JS演習2
学籍番号,アンダーバーは必ず半角でお願いします
 添付すべきファイル
 wordファイル(レポート本文)
2~3枚程度,ファイル名「学籍番号_氏名_JS演習2.doc」
 課題1.html,課題2.html
 JavaScriptとCSSを別ファイルにした場合には,それらのフ
ァイルも添付すること
レポート2
 レポート本文に書くべき項目
動作確認行ったブラウザ(IE or Firefox)
作成したJavaScriptの解説
HTML,CSS,JavaScriptを書く上で工夫した点
感想
 注意
 課題1と2共に工夫をしなくても合格点は出ますが,工夫
がしてある場合には評価します
 機能性・技術性・デザイン性・工夫した点を評価します
 CSS, JavaScriptはできれば別ファイルとして書く方が望
ましいです
問い合わせ先
• 第1研究室 24-604A
• 第2研究室 23-620B
E-mail:
[email protected]
気軽にお越しください♪
優しい山口研メンバーが待ってます。