- ベストアンサー
クリックでHTMLを操作してフォームを追加したい
こんにちわ 名前、住所、電話番号の入力フィールド、 submitで送信するJTMLがあったとします。 「住所を追加」をクリックした場合のみに、送付先の入力フィールドがjavascriptで追加されるようなサイトを見たことがあるのですが、どのように制御されるのでしょうか? クリックされればされただけフィールドが追加されるのが希望です。 参考サイトなどあれば教えて下さい。
- みんなの回答 (5)
- 専門家の回答
質問者が選んだベストアンサー
えーと、ループ番号ってのがどういうものかわかりませんが 思いっきり手をぬいてグローバルにカウンタをもたせてみました 本来なら最後の番号を見ながらそれにインクリメントするのが 正しい気はします。 (例によって挿入の都合上div_submitをクラスからidに変更しています) <script> var num=1; function addrow(obj){ var n=obj.parentNode.parentNode.firstChild; var flg=true; while(n){ if(n.nodeName=="DIV"){flg=false; break;} n=n.nextSibling; } if(flg) return false; var row=n.cloneNode(true); var n=row.firstChild; var flg=false; while(n){ if(n.nodeName=="#text" && n.nodeValue.match(/.*\:/)){ n.nodeValue=n.nodeValue.replace(/(.*)\:/,"$1"+ num +":"); flg=true; } n=n.nextSibling; } if(flg) num++; obj.parentNode.parentNode.insertBefore(row,document.getElementById('div_submit')); } </script> <form action="hoge.php"> <div class="div1">名前:<input type="text" name="name[]">住所:<input type="text" name="address[]">電話番号:<input type="text" name="tel[]"></div> <div id="div2">備考1<input type="text" name="bikou"></div> <div id="div_submit"><input type="button" value="add" onclick="addrow(this)"></div> </form>
その他の回答 (4)
- yambejp
- ベストアンサー率51% (3827/7415)
この場合備考も含めてクローンしたいのでしたらあわせてdivで くくります。 たんに住所の行だけでよいなら、備考はクラスではなくidで 管理するとやりやすくなります。 <script> function addrow(obj){ var n=obj.parentNode.parentNode.firstChild; var flg=true; while(n){ if(n.nodeName=="DIV"){flg=false; break;} n=n.nextSibling; } if(flg) return false; var row=n.cloneNode(true); obj.parentNode.parentNode.insertBefore(row,document.getElementById('div2')); } </script> <form action="hoge.php"> <div class="div1">名前:<input type="text" name="name[]">住所:<input type="text" name="address[]">電話番号:<input type="text" name="tel[]"></div> <div id="div2">備考1<input type="text" name="bikou"></div> <div class="div_submit"><input type="button" value="add" onclick="addrow(this)"></div> </form> ボタンが下にあると、連続して押せないのでUIとしてはどうかと・・・ 備考をクラスにした場合、ちょっと面倒なやりかたになるので 今回は割愛しますが、別にできないわけではありません。
- yambejp
- ベストアンサー率51% (3827/7415)
>javascriptを動かすためのボタンはどのように表示すれば良いでしょうか? あれ?提示したボタンではダメですか? もしそうであればインタフェースを具体的にどうしたいのか書いてください。
お礼
大変失礼しました。確認不足でした。 再度ご質問なのですが、form部分が下記の場合は <form action="hoge.php"> <div class="div1">名前:<input type="text" name="name[]">住所:<input type="text" name="address[]">電話番号:<input type="text" name="tel[]"></div> <div class="div2">備考1<input type="text" name="bikou"></div> <div class="div_submit"><input type="button" value="add" onclick="addrow(this)"></div> </form> どのような記述になりますか?
- yambejp
- ベストアンサー率51% (3827/7415)
手っ取り早いのは、オブジェクトをクローンして、アペンドするのかな・・・ <script> function addrow(obj){ var n=obj.parentNode.nextSibling; var flg=true; while(n){ if(n.nodeName=="DIV"){flg=false; break;} n=n.nextSibling; } if(flg) return false; var row=n.cloneNode(true); obj.form.appendChild(row); } </script> <form id="f0" action="hoge.php" method="get"> <div><input type="button" value="add" onclick="addrow(this)"> <hr /> </div> <div>名前:<input type="text" name="name[]">住所:<input type="text" name="address[]">電話番号:<input type="text" name="tel[]"></div> </form>
お礼
アドバイスありがとうございます。 javascriptを動かすためのボタンはどのように表示すれば良いでしょうか?
- t_ohta
- ベストアンサー率38% (5238/13705)
簡単なのは、スタイルシートを使い追加するフィールドを非表示(display: none;)にしておき、ボタンをクリックした時にJavaScriptでスタイルシートを書き換えて表示(display: block;)する方法ではないでしょうか。 <div id='soufusaki' style='display: none;'> 住所:<input type='text' name='xxx' /> </div> <input type='button' value='表示' onclick='soufusaki.style.display = "block";' />
お礼
アドバイスありがとうございます。 今回は、POSTされるデータにも影響与えるため、HTMLを変更する形を希望しています。 javascriptでCSSを制御が必要になった場合には役立たせて頂きます。
お礼
なんどもありがとうございます。 追記される項目をボタンのしたにぶら下げるのではなく、備考1の下(この場合はdiv2とdiv_submitの間)に追記していくにはどうすれば良いでしょうか? また、項目名(この場合は名前:住所:電話番号:のみっつ)にループ番号を振ることは可能でしょうか?