今まではデータ行の追加と削除処理を個別に説明してきましたが、 今回は table への操作処理の第4弾として table の行を追加と削除を統合する方法について説明します。
■このページの内容
■javascriptで動的に追加したHTMLでイベント処理を発火させる
今までは以下の様に jquery の click イベント生成で処理を宣言していました。
$(".btnDel").click(function(){
//削除処理
...
});
しかし、この方法では動的に class="btnDel" と属性を持ったボタンが追加されても、イベント処理は行われません。
そこで以下の様に jquery の on 関数によりクリックイベントを宣言してやれば、後から追加されたHTMLに対して イベント処理が行われる様になります。
$(document).on("click", ".btnDel", function () {
//削除処理
...
});
■table への操作として追加と削除が出来る様にした例
以下の例は table の先頭に追加処理で必要な追加行のテンプレートを設け、 その後は3行のデータを仮に宣言します。
javascript の先頭で既存行のMAXインデックスを定義して、 追加ボタン処理ではこの値をプラス1してテンプレートからの行にカスタム属性「data-index」に設定します。
削除ボタンの処理は上記の on 関数によりクリックイベントを宣言します。
<html>
<head>
<meta charset="utf-8">
<title>test jQuery adddel</title>
<script src="https://code.jquery.com/jquery-3.2.1.min.js"></script>
</head>
<body>
<table border="1">
<thead>
<tr>
<th>品名</th>
<th>数量</th>
<th>単価</th>
<th>金額</th>
<th>削除</th>
</tr>
</thead>
<tbody>
<tr id="RowTemplate" style="display: none;">
<td>なし</td>
<td>2</td>
<td>50</td>
<td>100</td>
<td><button class="btnDel">削除</button></td>
</tr>
<tr data-index="1">
<td>りんご</td>
<td>2</td>
<td>100</td>
<td>200</td>
<td><button class="btnDel">削除</button></td>
</tr>
<tr data-index="2">
<td>みかん</td>
<td>5</td>
<td>50</td>
<td>250</td>
<td><button class="btnDel">削除</button></td>
</tr>
<tr data-index="3">
<td>いちご</td>
<td>3</td>
<td>250</td>
<td>750</td>
<td><button class="btnDel">削除</button></td>
</tr>
</tbody>
</table>
<button id="btnAdd">最終行に追加</button>
<script>
//最初の行MAX-index
var MaxIndex = 3
//関数定義
$(function () {
//<button class="btnDel">のクリックイベントの関数を宣言
//$(".btnDel").click(function(){
$(document).on("click", ".btnDel", function () {
//クリック行の<tr>jqueryオブジェクト取得
var obj = $(this).parent().parent();
//<tr>のカスタム属性値を取得
var index = obj.attr("data-index");
//行削除
$('tr[data-index="' + index + '"]').remove();
});
//<button id="btnAdd">のクリックイベントの関数を宣言
$("#btnAdd").click(function(){
//テンプレート行のjqueryオブジェクト取得
var obj = $('#RowTemplate').clone();
//非表示スタイルを表示にする
obj.show();
//Indexを増やす
MaxIndex += 1;
obj.attr("data-index", MaxIndex);
obj.attr("id", ""); //[RowTemplate]のIDは要らないので
//最後尾にjqueryオブジェクト追加
$('table tbody').append(obj);
});
});
</script>
</body>
PR
コメント