• ベストアンサー

クリックでHTMLを操作してフォームを追加したい

こんにちわ 名前、住所、電話番号の入力フィールド、 submitで送信するJTMLがあったとします。 「住所を追加」をクリックした場合のみに、送付先の入力フィールドがjavascriptで追加されるようなサイトを見たことがあるのですが、どのように制御されるのでしょうか? クリックされればされただけフィールドが追加されるのが希望です。 参考サイトなどあれば教えて下さい。

  • mr59
  • お礼率33% (70/210)

質問者が選んだベストアンサー

  • ベストアンサー
  • yambejp
  • ベストアンサー率51% (3827/7415)
回答No.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)
回答No.4

この場合備考も含めてクローンしたいのでしたらあわせて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としてはどうかと・・・ 備考をクラスにした場合、ちょっと面倒なやりかたになるので 今回は割愛しますが、別にできないわけではありません。

mr59
質問者

お礼

なんどもありがとうございます。 追記される項目をボタンのしたにぶら下げるのではなく、備考1の下(この場合はdiv2とdiv_submitの間)に追記していくにはどうすれば良いでしょうか? また、項目名(この場合は名前:住所:電話番号:のみっつ)にループ番号を振ることは可能でしょうか?

  • yambejp
  • ベストアンサー率51% (3827/7415)
回答No.3

>javascriptを動かすためのボタンはどのように表示すれば良いでしょうか? あれ?提示したボタンではダメですか? もしそうであればインタフェースを具体的にどうしたいのか書いてください。

mr59
質問者

お礼

大変失礼しました。確認不足でした。 再度ご質問なのですが、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)
回答No.2

手っ取り早いのは、オブジェクトをクローンして、アペンドするのかな・・・ <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>

mr59
質問者

お礼

アドバイスありがとうございます。 javascriptを動かすためのボタンはどのように表示すれば良いでしょうか?

  • t_ohta
  • ベストアンサー率38% (5083/13283)
回答No.1

簡単なのは、スタイルシートを使い追加するフィールドを非表示(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";' />

mr59
質問者

お礼

アドバイスありがとうございます。 今回は、POSTされるデータにも影響与えるため、HTMLを変更する形を希望しています。 javascriptでCSSを制御が必要になった場合には役立たせて頂きます。

関連するQ&A

  • HTMLのフォームでのデータの持っていきかたについて

    HTMLとPHPを使いアカウント作成のページを作成しています。 テキストボックスに名前等を入力して登録ボタンを押すときに、パスワード認証画面(アカウント作成用のパスワードを入力)を経由して次の画面に行きたいと考えています。その際にはテキストボックスに入力したデータを持っていかなければならないのですが、うまく持っていってくれません。 actionに直接javascriptを入れるとデータは持っていってくれないのでしょうか? よろしくお願いします。 <form method='post' action="JavaScript:var pass=prompt('パスワードを入力してください','****');if(pass){location.href= pass+'.php';}"> <p>名前<input type="text" name='hName' value='$hName'></p> <p>住所<input type='text' name='hpostcode2' value='$hpostcode'></p> <p>コード番号<input type='text' name='haddress2' value='$haddress'></p> <input type="submit" value='$hNamebutton2'> </form>

    • ベストアンサー
    • HTML
  • リスト追加

     HTML画面で、テキストフィールドに文字を入力し、 ボタンを押すと、入力した文字列がリストボックスに追加されるJavaScriptを作りたいのですが、良くわかりません。  いろいろ、JavaScriptのサイトに行って、  探してみましたが、そういったサンプルが見当たりません。  どうか、お教えください。おねがいします。

  • radioをクリックするとSubmitを表示

    現在フォームを作成しています。 ちょっとした確認セクションを作りたいと思っています。 ラジオチェックをクリックするとwindow.comfrimが表示され「送信を希望されますか?」という確認を表示し、OKをクリックするとフォームの下に送信ボタンの<input type="submit" value="送信">が表示されるようにしたいと考えています。 自力で書いたソース: <javascript> function check(){ if(window.confirm('送信を希望しますか?')){ //ここでSubmitを表示さるプロセス? } } </javascript> <input type="radio" name="check" value="1" onClick="check()">送信希望 よろしくお願いします。

  • ネットショップの注文フォームで注文者住所を送付住所に一発コピーしたい

    ネットショップで使っている注文フォームについて質問ですm(_ _)m オーダーメイドの商品を作るショップで、入力してもらう項目数が多いため、 買い物カゴではなくて、メールフォームを使いって注文してもらってます。 使っているメールフォームは、ホームページの飾り職人さんのPerlMailer 3.02です。 http://www.din.or.jp/~hideyuki/home/cgi/mailer.html これだと、入力していただくページがHTMLで自由に設定できるので、 項目や入力方法も自由に選択出来ますし、細かい注意書きや、デザインなども 全て好きに出来るので、ずっと使っているのですが、 出来れば下記の機能を追加できたら良いな、と思っています。 ご注文者様の名前・フリガナ・郵便番号・住所・電話番号をご入力いただいた後、送付先の入力欄で、 プルダウン、ラジオボタンなどで「ご注文者様の住所に送付」という項目を選択すると、 自動的に、送付先名前・フリガナ・郵便番号・住所・電話番号の入力欄に、 ご注文者様の名前・フリガナ・郵便番号・住所・電話番号がコピーされる。 javascriptなどで出来るものでしょうか? ぜひ、教えて下さい!m(_ _)m

  • フォーム内の操作で・・・

    JavascriptとCGIを利用しています。応募フォームを作成し、氏名等を入力してもらい、送信できるページを作成中です。例えば応募フォームを入力中に前のページを確認できるようにしたいのですが、その時に入力途中の内容を保持し、ブラウザの【進む】ボタンか何かで応募フォームを再度表示させた時、前の入力内容が表示上残るようにしたいと思っています。過去の質問で似たようなものがあり、いろいろ考えてみたのですが解決出来ませんでしたのでお願い致します。 (1)ブラウザの【戻る】や【進む】を利用する場合の方法 (2)<form action="aaa.cgi">のsubmit等でやり取りする方法 どんな方法でも良いです。 (2)の方法の場合【送信】ボタンがフォーム内にあり、<input type="txt">で入力した値を【送信】の時と【戻る】の両方で利用したい。 出来れば簡単なもので結構ですのでコードのサンプルがあるとうれしいです。お願い致しますM(V_V)M

    • ベストアンサー
    • HTML
  • WebフォームのIMEモードを入力項目毎に自動切替

    ある人と話していて、議論になったので質問します。世の中にはたくさんのウェブフォームがあって、名前や住所、電話番号などの登録情報を入力することが多々あります。あまり深く考えたことはなかったのですが、私はなんとなく、「名前や住所のテキスト入力時には自動的にIMEの入力モードが日本語(ひらがな)になり、電話番号やメールアドレスのテキスト入力時には英数になる」ものだと思っていました。自分でIMEを操作することなく、テキストフィールドにタブで移動したりもしくはマウスをクリックしたときにアプリケーション側で制御されるものが大半だと思っておりました。それを聞いてある人は「そんなことはない、世の中の大半のアプリはそんなことを制御していない、「普通」は自分でIMEで制御しながら入力するものだ」、と言っていたので議論になりました。これからウェブサイトを作ろうと思っているので、最終的にはこの議論はアプリ側にそのような実装をするかどうかというところに帰着するのですが、まずは「一般的にどうなのか」というところでご意見を頂きたいと思います。ちなみに、日本のメジャーなサイト(航空会社、ポータル、携帯電話、電気屋)10個でユーザ登録フォームを確認したところ、名前欄をクリックしてもいずれもIMEのモードはひらがなに変更されませんでした。そこで今は友人が正しくて、僕が間違っていたどころか、「そもそも、名前入力時に自動的にひらがなにモード変換されるようなサイトって本当にあるのだろうか。。」というような状態になっております。どなたか、教えてください。よろしくお願いします。

    • ベストアンサー
    • CSS
  • input type="text"内の禁止語について教えてください。

    フォームに入力されたくない文字をJavaScriptで制御したいのですが、どなたか宜しくお願いします。 例えば、名前入力欄<input type="text" name="name">に『♪』や『★』などと、『up』『新作』など特定の文字が入っている場合は送信(submit)できないようにしたいのですが、どのように書けばよいでしょうか。 どうぞ宜しくお願いいたします。

  • javascriptで入力禁止文字をチェック

    javascriptで入力禁止文字をチェック 初めて質問させていただきます。 javascriptで入力フォーム(テキストフィールド)に入力された文字列の中に入力禁止文字がないかをチェックしたいとおもっております。 例えば、テキストフィールドに「バカ」「ハゲ」等と入力されており、送信ボタンを押すと「入力禁止文字が含まれています」とアラートが表示されるといったものです。 入力禁止文字がなければ、送信ボタンをクリックし、指定されたURLへジャンプしたいと考えています。 javascriptのソースをお教えいただけたり、参考になるサイトをお教えいただければ助かります。 よろしくお願いします。

  • アンケートフォームで前のページへ戻るをクリックしてもテキストフィールドの値が消えないようにするには。

    こんにちわ。よくある、アンケートフォームのcookieの処理だと思うんですけど、名前とか住所とかを入力したあと次ページで確認画面がでてきて、修正したい場合は戻って修正するってやつありますよね。 そのときに「戻る」を押すと、テキストフィールドに入力した値が全部クリアされてしまうのですが、全部クリアされないように処理するにはどうしたらいいのでしょうか?javascriptのhistryback()を使えばできるんですけど、携帯なんでjavascriptは使えないんで、cookieでやると思うんですけど、どうやったらいいのかよくわかりません。。。 簡単でいいので処理のしかたをご存知のかたがいらしたらぜひともご教授ください。よろしくお願いします。

    • ベストアンサー
    • CGI
  • Accessでフィールドを追加したい

    Accessであるシステムを作成しているのですが、いくつか不明な点があるのでアドバイスをお願いします。 「社員情報」をいうテーブルがあり、初期の状態で「社員番号」「氏名」「入社年月日」「年齢」とフィールドがあります。 このテーブルを基にフォーム「社員情報入力」も作ってあります。 ここで新たに、社員情報テーブルに「生年月日」「連絡先」など、フィールドを追加したいのですが・・・以下のような条件があるので、どうしていいのかわからず困っています。 【条件】 ・フィールド追加用のフォーム(新規フィールド名を入力させる)を作り、そこからフィールドを追加させる。(直接テーブルはいじらせないため) ・追加したフィールドを社員情報入力フォームに反映(表示)させたい ・追加したフィールドをレポートにも反映(表示)させたい このような条件でフィールドの追加は無理なのでしょうか? アドバイスや参考になるページを教えてください。 よろしくお願いします。

専門家に質問してみよう