準備段階
今回はJavaScriptを使って、下の「成績管理サンプル」を作成していきたいと思います。

画面設計書を参考にサンプルを制作していきますが、その前に準備段階として
・JavaScriptでの「行追加」/「行削除」の実装
・ 画面設計書の読み込み
を確認していきましょう。
下記の配布資料に設計書ファイルが格納されていますので、必要に応じてダウンロードしてください。
【配布資料】JavaScriptで「成績管理サンプル(レコード追加・削除処理の実装)」を作ってみよう
JavaScript:「行追加」の実装
今回はJavaScriptを使って、DOMツリーに(新規の)ノードを追加する方法で行追加を実装します。(他の方法もありますが、ここでは下のメソッドを使用します)

例:ユーザが「行の追加」ボタンをクリックするごとに、テーブルに行を追加
practice1_1.html

下記のソースを理解することでDOM追加メソッドの使用法をおさえましょう。
<html>
<head>
<meta http-equiv="Content-Script-Type" content="text/javascript">
<title>DOMを使用したノードの追加</title>
<script language="JavaScript" type="text/javascript">
function addRow(){
// tbodyエレメントのノードを取得する
var tbody = document.getElementById("firstTr").parentNode;
// trの作成
var tr = document.createElement("tr");
// 最初のtdを作成
var td1 = document.createElement("td");
var txt1 = document.createTextNode("DOM");
td1.appendChild(txt1);
// 2つめのtdを作成
var td2 = document.createElement("td");
var txt2 = document.createTextNode("ドキュメントオブジェクトモデル");
td2.appendChild(txt2);
// ノードを追加する
tr.appendChild(td1);
tr.appendChild(td2);
tbody.appendChild(tr);
}
</script>
</head>
<body bgcolor="#ffffff" id="body">
<h1>テーブルに行を追加する</h1>
<form name="myForm">
<p><input type="button" value="行の追加" onclick="addRow()"></p>
</form>
<table id="myTable" border="1">
<tr id="firstTr">
<td>JavaScript</td><td>スクリプト言語</td>
</tr>
<tr>
<td>CSS</td>
<td>スタイルシート</td>
</tr>
</table>
</body>
</html>
JavaScript:「行削除」の実装
今回はJavaScriptを使って、DOMツリーでノードを削除する方法で行削除を実装します。(他の方法もありますが、ここでは下のメソッドを使用します)

例:ユーザが「行の削除」ボタンをクリックするごとに、テーブルの行が削除
practice1_2.html

下記のソースを理解することでDOM削除メソッドの使用法をおさえましょう。
<html>
<head>
<meta http-equiv="Content-Script-Type" content="text/javascript">
<title>DOMを使用したノードの削除</title>
<script language="JavaScript" type="text/javascript">
function deleteRow(){
var tbody = document.getElementById("firstTr").parentNode;
var numOfRow = tbody.childNodes.length;
if(numOfRow > 0){
tbody.removeChild(tbody.childNodes[numOfRow -1]);
}
}
</script>
</head>
<body bgcolor="#ffffff" id="body">
<h1>テーブルの行の削除</h1>
<form name="myForm">
<p><input type="button" value="行の削除" onclick="deleteRow()"></p>
</form>
<table id="myTable" border="1">
<tr id=firstTr">
<td>JavaScript</td>
<td>スクリプト言語</td>
</tr>
<tr>
<td>DOM</td>
<td>ドキュメントオブジェクトモデル</td>
</tr>
</table>
</body>
</html>
画面設計書の読み込み
添付資料の「画面設計書(JS成績管理サンプル).xlsx」を確認してください。


添付資料の「画面設計書(JS成績管理サンプル).xlsx」を見て、サンプルを実装してください。
Seiseki_Sample.html
<html>
<head>
<script language="JavaScript" type="text/javascript">
function addRow(){
// フォームのテキストの内容を取得する
var inName = document.FORM.input_name.value;
var inGroup = document.FORM.input_group.value;
var inScore = document.FORM.input_score.value;
// エラーメッセージの初期化(非表示)
document.getElementById("nameError").style.display ="none";
document.getElementById("nameGroup").style.display ="none";
document.getElementById("nameScore").style.display ="none";
var errorFlg = false;
//入力チェックを実施
if(inName == ""){
document.getElementById("nameError").style.display ="block";
errorFlg = true;
}
if(inGroup == ""){
document.getElementById("nameGroup").style.display ="block";
errorFlg = true;
}
if(inScore == ""){
document.getElementById("nameScore").style.display ="block";
errorFlg = true;
}
if(errorFlg){
return;
}
// tbodyエレメントのノードを取得する
var tbody = document.getElementById("firstTr").parentNode;
// trの作成
var tr = document.createElement("tr");
var numfOfRow = tbody.childNodes.length - 1;
// 1つめ~4つ目のtdを作成
// 【処理を記載】
// 5つめのtdを作成
var td5 = document.createElement("td");
td5.setAttribute("align", "center");
var input5 = document.createElement("input");
input5.setAttribute("type","button");
input5.setAttribute("value","X");
input5.setAttribute("onClick","colDel(this)");
td5.appendChild(input5);
// ノードを追加する
// 【処理を記載】
}
function colDel(obj){
//削除ボタンを押下された行を取得
// trのインデックスを取得して行を削除する
//【処理を記載】
}
</script>
</head>
<title>成績管理サンプル</title>
<body>
<h2>成績表</h2>
<form name="FORM">
<table>
<tr >
<th >名前</th>
<td><input type="text" id="input_name" name="input_name" value=""></td>
</tr>
<tr>
<th >グループ名</th>
<td><input type="text" id="input_group" name="input_group" value=""></td>
</tr>
<tr>
<th >点数</th>
<td><input type="text" id="input_score" name="input_score" value=""></td>
</tr>
</table>
</form>
<br><hr><br>
<input type="button" id="btn_row_add" value="行追加" onClick="addRow()">
<br><br>
<!-- メッセージ出力エリア -->
<span id="nameError" style="color:#ff0000; display:none;">「名前」が未入力です。入力してから行追加をしてください。</span>
<span id="nameGroup" style="color:#ff0000; display:none;">「グループ名」が未入力です。入力してから行追加してください。</span>
<span id="nameScore" style="color:#ff0000; display:none;">「点数」が未入力です。入力してから行追加してください。</span>
<br><br>
<table>
<tr id="firstTr">
<th width="10px"> No </th>
<th width="100px">名前</th>
<th width="100px">グループ名</th>
<th width="60px">点数</th>
<th width="60px">削除</th>
</tr>
</table>
</body>
</html>
#edu-IT #名古屋





