ボタンクリックでテーブルに行を追加する JavaScript

2009年3月14日 12:55 ボタンクリックでテーブルに行を追加する JavaScript

ユーザー側から任意の複数行のデータをフォームから受け取る場合に、入力フォームのテーブルの行を、ボタンクリックで動的に追加していく処理というのは、結構使えるんじゃないかなと思います。

例えば、以下のようなテーブルがある場合。

<table border="1" cellspacing="0" cellpadding="4" id="table1">
  <tr>
    <th>名前</th>
    <th>住所</th>
    <th>TEL</th>
  </tr><tr>
    <td class="name"><input type="text" name="name" value="" size="10" maxlength="20" /></td>
    <td class="address"><input type="text" name="address" value="" size="10" maxlength="20" /></td>
    <td class="tel"><input type="text" name="tel" value="" size="10" maxlength="20" /></td>
  </tr>
</table>

「insertRow」や「insertCell」を使って、「table1」という ID を持つテーブルに、行を追加します。

var table1 = document.getElementById("table1");
var row1 = table1.insertRow(1);	// 行を追加
var cell1 = row1.insertCell(0);	// 一つ目のセルを追加
var cell2 = row1.insertCell(1);	// 二つ目のセルを追加
var cell3 = row1.insertCell(2);	// 三つ目のセルを追加

「insertRow」「insertCell」の各引数は、何番目の行・セルを追加するかを指定します。
IEでは引数なしでも動きますが、FireFoxでは引数が必須なので注意。

で、最初のサンプルでは各セルに class を指定していたわけですが、追加したセルに class を指定するには、「setAttribute」「className」等を使います。

cell1.setAttribute("class","name");
cell2.setAttribute("class","address");
cell3.setAttribute("class","tel");
cell1.className = 'name';
cell2.className = 'address';
cell3.className = 'tel';

また、セルの中身である input 要素等を入れるのには、「innerHTML」を使います。

var HTML1 = '<input type="text" name="name" value="" size="10" maxlength="20" />';
var HTML2 = '<input type="text" name="address" value="" size="10" maxlength="20" />';
var HTML3 = '<input type="text" name="tel" value="" size="10" maxlength="20" />';
cell1.innerHTML = HTML1;
cell2.innerHTML = HTML2;
cell3.innerHTML = HTML3;

ただ、これだとボタンをクリックされる毎に追加される input 要素の name 属性が、全て「name」「address」「tel」になってしまうので、別途カウンタを回して「name1」「name2」......みたいな感じになるようにした方が良いでしょう。

この辺の事も踏まえたうえでのサンプルコードは以下。

<script type="text/javascript">
var counter = 0;
function AddTableRows(){
	// カウンタを回す
	counter++;

	var table1 = document.getElementById("table1");
	var row1 = table1.insertRow(counter);
	var cell1 = row1.insertCell(0);
	var cell2 = row1.insertCell(1);
	var cell3 = row1.insertCell(2);

	// class の付与は UserAgent によって
	// 挙動が違うっぽいので念のため両方の方法で
	cell1.setAttribute("class","name");
	cell2.setAttribute("class","address");
	cell3.setAttribute("class","tel");
	cell1.className = 'name';
	cell2.className = 'address';
	cell3.className = 'tel';

	var HTML1 = '<input type="text" name="name' + counter + '" value="" size="10" maxlength="20" />';
	var HTML2 = '<input type="text" name="address' + counter + '" value="" size="10" maxlength="20" />';
	var HTML3 = '<input type="text" name="tel' + counter + '" value="" size="10" maxlength="20" />';
	cell1.innerHTML = HTML1;
	cell2.innerHTML = HTML2;
	cell3.innerHTML = HTML3;
}
</script>

<table border="1" cellspacing="0" cellpadding="4" id="table1">
  <tr>
    <th>名前</th>
    <th>住所</th>
    <th>TEL</th>
  </tr><tr>
    <td class="name"><input type="text" name="name0" value="" size="10" maxlength="20" /></td>
    <td class="address"><input type="text" name="address0" value="" size="10" maxlength="20" /></td>
    <td class="tel"><input type="text" name="tel0" value="" size="10" maxlength="20" /></td>
  </tr>
</table>
<form method="GET" action="#">
  <input type="button" value="テーブルに行を追加" onClick="AddTableRows();" />
</form>

実際の挙動

名前 住所 TEL

ボタンクリックでテーブルに行が追加されるはずです(ちゃんと動くかな)。
各行の input 要素の name 属性も、「name1」「name2」......となっていくはず。

Twitterつぶやく

Twitter始めました。Followはお気軽にどうぞ。

関連するブログ記事
スポンサード リンク
カテゴリー
JavaScript
タグ
class属性 | form要素 | input要素 | JavaScript | name属性 | table要素 | td要素 | tr要素 | xhtml
現在位置
TOP > Web制作技術 > JavaScript > ボタンクリックでテーブルに行を追加する JavaScript
前のブログ記事
Sleeping Box [2009年3月13日 23:37]
次のブログ記事
perl や PHP で Excelファイル(xlsファイル)を簡単に出力する方法 [2009年3月15日 15:48]

トラックバック(0)

このブログ記事に対するトラックバックURL:

コメント(0)

コメントする


画像の中に見える文字を入力してください。

 

このブログについて

阿部辰也

Webコンサルタントやシステムエンジニア、執筆業などをやっている、グッドホープ代表・阿部辰也のブログです。
Web技術系のTipsから仕事の話、趣味の話まで色々と。
人生は所詮生まれてから死ぬまでの壮大な暇つぶし。
だったら有意義に暇をつぶして生きましょー。

Twitter: @t_abe
読書メーター: ID:t-abe

このブログのサイトマップ
このブログのはてなブックマーク数

Feed/RSS購読

タグクラウド

最近のトラックバック

阿部辰也の著書

77のキーワードで知る インターネットで稼ぐ 図解 ブログ・メルマガ・Webサイト構築の基本

77のキーワードで知る インターネットで稼ぐ 図解 ブログ・メルマガ・Webサイト構築の基本

頑張って書いたのに、出版後すぐに出版社が倒産して印税も貰えずじまいで俺涙目(笑)。

Powered by Movable Type 4.261

スポンサード リンク

はてなブックマーク



あわせて読みたい

t-abeの今読んでる本

t-abeの最近読んだ本

t-abeの今やってるゲーム

t-abeの最近やったゲーム