入力フォーム毎コピーを作成する方法について…
HTML
出力するためのテンプレートと出力するエリアを作成します。
<div id="displayArea"> <!-- ここに出力 --> </div> <button id="addButton">Add</button> <div id="templateForm" class="NotDisp"> <input type="text" name="templateTextbox"> <button name="testButton">TEST</button> <span class="dispInfo"></span> <button name="removeButton">REMOVE</button> </div>
CSS
テンプレート部分は非表示にしておく為に「display:none;」を指定しておきます。
.notDisp { display:none; }
jQuery
結構長ったらしく書いていますが、順に説明すると…
- テンプレートからコピーを作成する。
- コピーしたデータから非表示用のクラスを削除する。
- コピーしたデータのテキストボックスへidを追加する。
- コピーしたデータのボタンへクリック時のイベントを追加する。
- コピーしたデータのボタンへidを追加する。
- 表示用のエリアに追加する。
$(function(){ var idNo = 1; // 追加ボタン押下時イベント $('button#addButton').on('click',function(){ $('div#templateForm') // コピー処理 .clone(true) // 不要なID削除 .removeAttr("id") // 非表示解除 .removeClass("notDisp") // テキストボックスのID追加 .find("input[name=templateTextbox]") .attr("id", "textbox_" + idNo) .end() // ボタンのID追加 .find("button[name=templateButton]") .on('click',function(){alert($(this).attr('id'));}) .attr("id", "button_" + idNo) .end() // 情報表示 .find("span.dispInfo") .text("id[" + idNo + "] TextBox_ID[" + "textbox_" + idNo + "] Button_ID:[" + "button_" + idNo + "]") .end() // 追加処理 .appendTo("div#displayArea"); // ID番号加算 idNo++; }); // 削除ボタン押下時イベント $('button[name=removeButton]').on('click',function(){ $(this).parent('div').remove(); }); // 削除ボタン押下時イベント $('button[name=removeButton]').on('click',function(){ $(this).parent('div').remove(); }); });
実際の動作
See the Pen zpVoBx by miko (@miko3) on CodePen.
テキトーに書いたコードなので簡潔かつ綺麗に書けそう…
参考になりました。ありがとうございます