• ベストアンサー

入れ子のsubmit?

 失礼致します。 質問させてください。 今javaとjavascriptを使って値を保持する選択型入力フォームを作っています。それで、目的を達成するにはformが入れ子になりそうなのです。 イメージ図として <form> --------------- <form> ------ ------ </form> <form> ------ ------ </form> <form> ------ ------ </form> --------------- </form> というのは無理でしょうか?(無理でしょうね・・)(+o+) 長くなりすぎるため省略していて申し訳ありませんが、入れ子になる前のソースは以下のようになります。 <% for(int i = 0 ; i<5 ; i++) { %> <form method="POST" action="jsp(元のURLに戻る)" name="form<%=i%>"> <select name = "kibou"> <option value = "-" <% if("-".equals(kibou) { %>selected<% } %>>-</option> <option value = "購入" <% if("購入".equals(kibou)) { %>selected<% } %>>購入</option> </select> <input type = "submit" value = "更新"> </form> <% } %> (値は配列に入れ、iの値に応じて取れるようにしています。また、更新した値は裏で保持されます。) ここで、上のソースでは「-」か「購読」という値を持ったフォームが5つでき、5つの更新ボタンのうち1つを押すことでそのフォームにあった値を更新できます。 では全体の更新、例えば5つとも「-」から「購読」に変更し、更新ボタンを押すことで5つともの値が変わるようにするにはどうすればいいでしょうか? 全体を一つのフォームにすればできそうだなということは分かりますが、一つひとつの更新ボタンも残しつつ全体の更新ボタンも追加したいのです。 分かりにくい説明ではございますが、何か分かる方がおられましたらよろしくお願いします。m(__)m

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

  • ベストアンサー
  • talepanda
  • ベストアンサー率58% (45/77)
回答No.4

サーバ側の処理が良くわからないんでなんともいえないですが、やり方はいくらでもあります。 大体イメージとしてこんな感じでいいんじゃないですか? サーバ側では、hiddenパラメータupdateが0なら全部更新、1-5ならその番号だけ更新すればいいかと。 テストもしてないし、そもそもJSPよく知らないんで細かいところは直してください。ロジックはこんなんで出来るはずです。 <form method="POST" action="jsp(元のURLに戻る)" name="form0"> <% for(int i = 0 ; i<5 ; i++) { %> <select name = "kibou"> <option value = "-" <% if("-".equals(kibou) { %>selected<% } %>>-</option> <option value = "購入" <% if("購入".equals(kibou)) { %>selected<% } %>>購入</option> </select> <button onclick="this.form.update.value='<% i %>';this.form.submit();">この項目だけ更新</button> <% } %> <input type="hidden" name="update" value="0"/> <input type="submit" value="全部更新"/> </form>

javatea_1985
質問者

お礼

すごくイメージがわきました! やはりformは一つなのですね。 やってみます、ありがとうございました。(=´∇`=)

その他の回答 (3)

  • talepanda
  • ベストアンサー率58% (45/77)
回答No.3

フォームはひとつで、 <button onclick="フォーム.submit()">更新</button> を好きなだけ好きなところに置いたらよろしいかと。 フォーム.submit()の"フォーム"は適宜書き換えてくださいね。

javatea_1985
質問者

補足

ご回答ありがとうございます。 たれパンダさんの示していただいた方法が一番簡単そう(?)だなと思い、イメージしてみました。 しかし、フォーム名の指定のところでつまずきました。フォームを1つにするとフォームを指定できないです。 input名のvalueを変えておいてfunction内にdocument.form.kibou<%=i%>=kibou として値を取り込むのがよろしいでしょうか? ついでにsubmitさせる形で・・ それともfunction submit<%=i%>() もしくはfunction submit(i)の方がいいでしょうか? 多少頭が混乱していまして、いけそうかどうかすら見えないです。アドバイスしていただけますでしょうか?m(__)m

  • galluda
  • ベストアンサー率35% (440/1242)
回答No.2

がると申します。 とりあえず、FORMのネストはNGなので(DTDに明記されています)、その時点で夢は潰える形になるか、と。 こういった場合、ボタンにnameとvalueを縛り付けておいて、どのボタンが押されたか、で挙動を割り振ります。

javatea_1985
質問者

お礼

ご回答ありがとうございました。 いつも答えて頂いているものの、周りのご回答がすばらしかったために今回はこうさせて頂きました。申し訳ありません。(ToT)>

noname#20915
noname#20915
回答No.1

上半分に関しては不可です。 下半分に関してですが、 1.フォームを一つにする。 2.submitボタンは一つだけ。残りは全てtype="button"で作成。    → 何なら全部type="button"で作成。 3.各ボタンにjavascriptのonclickイベントを記述。 というような流れで実現できませんかね?

javatea_1985
質問者

補足

ご回答ありがとうございます。 buttonはほとんど使ったことがなく、あまり見通しが立たないのですが、やってみます。 ありがとうございました。m(__)m

関連するQ&A

  • submit

    例えば <form method="get" action="このページ自身"> <select name="type"> <option value="myA" selected>A</option> <option value="myB">B</option> <option value="myC">C</option> </select> <input type="submit" name="sbm" value="GO" /> となっていて これを onchange を用いて選択が変わったときに submit ボタンを自動で押したいのです。なおかつ submit ボタンを最初から隠したいのです。 誰か教えてください。

  • select値でのフォームのaction値の変更

    以下のようなフォームでselectの値によって PHPでactionのURLを変更させるようなことは出来るでしょうか。 <form name="form" method="GET" action="ここをselect値により変更"> <input type="text" name="word" id="word" value="" /> <select name="select" id="select"><option selected="selected" value="01">値01</option> <select name="select" id="select"><option selected="selected" value="02">値02</option> <select name="select" id="select"><option selected="selected" value="03">値03</option> </select> </form> 以上、どうぞ宜しくお願い申し上げます。

    • ベストアンサー
    • PHP
  • セレクトボックスの選択項目を変える

    セレクトボックスの選択項目を変えるには どうすればいいですか? <FORM action=./ method=post> <SELECT name=server> <OPTION value=2 selected>2</OPTION> <OPTION value=3>3</OPTION> <OPTION value=4>4</OPTION> </SELECT> </FORM> こういうフォーム(FORMやOPTIONにnameがない)で [4]を選択したいです このフォームを書き換えないで(スクリプトでの書き換えなら○) どうにか変えることはできないでしょうか? IEのみの対応でいいので、お願いします

  • onChangeだと思うのですが・・・

    <FORM> <SELECT> <OPTION selected>タイトル</OPTION> <OPTION>タイトル2</OPTION> <OPTION>タイトル3</OPTION> </SELECT> <input type="button" value="ボタン" onClick="location.href='mailto:xxx@xxx?subject=タイトル'"> </FORM> セレクトの選択に合わせてメールのタイトルを変えたいのですが うまくいきません。 onChangeを使うとフォームの値としては取得はできますが・・・ 上記のような場合はどうすればよいのでしょうか? 教えてください。よろしくおねがいします。 仕事の関係で至急作らなくてはいけなくなりまして、 困っています。

  • プルダウンを選択していないときは、初期値(selected)の値を、選

    プルダウンを選択していないときは、初期値(selected)の値を、選択したときは選択値を、hiddenで渡したい。 ▽プルダウン例 <form> <select> <option value="0" selected>A</option> <option value="4">B</option> <option value="6">C</option> </select> </form> ↑上で選択した値(A or B or C)値を、↓下のvalue=「"hoge"」に渡したいです。 ※選択肢は3つだけではなくて、たくさんあります。 ▽input例 <input name="category_name" value="hoge" type="hidden"> ※formとかselectにid振っても構いません。 ※javascriptでやりたいです。

  • 全てのselect要素をデフォルトの値に戻す方法

    ページを開いたときは、全てのselect部分ではデフォルトが表示されます。 選択後にブラウザを更新させずに、全てをデフォルトに戻すためには どのようにしたらよいのでしょうか。 html側でselected="selected"とする方法がありますが、 ブラウザによって対応していなかったりしたので、他に確実な方法を知りたいです。 よろしくお願いします。 <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> <html lang="ja"> <head> <meta http-equiv="Content-Type" content="text/html; charset=Shift_JIS"> <title>全てのselectをデフォルトにする</title> </head> <body> <form> <select name="s0" onclick="f(this.form)"> <option value="デフォルト" selected="selected">デフォルト</option> <option value="A">A</option> <option value="B">B</option> </select> <select name="s1" onclick="f(this.form)"> <option value="デフォルト" selected="selected">デフォルト</option> <option value="あ">あ</option> <option value="い">い</option> </select> <select name="s2" onclick="f(this.form)"> <option value="デフォルト" selected="selected">デフォルト</option> <option value="a">a</option> <option value="b">b</option> </select> </form> <script> function f(fff){ var aaa = [] var fel; var sl = document.getElementsByTagName('select').length; for(i=0; i<sl; i++){ fel = fff.elements["s"+i]; //デフォルトかそうでないかをdefaultSelectedで判断 aaa[i] = fel.options[fel.selectedIndex].defaultSelected; if( aaa[i] == false ){ //false(=デフォルトでない)場合はデフォルトに戻す aaa[i] = true; } //戻り値をかえして全てをデフォルトにする return aaa[i]; } } </script> </body> </html>

  • selectの要素を、各自submitにしたい!

    毎度、お世話になります。 http://www.komonet.ne.jp/script.htm KOMONETさんの「高機能ショッピングカート」を改造しています。 このショッピングカートのページトップに、各カテゴリ別に移動する セレクト要素がありますが、<select>を使わずに、要素を直接 submitさせるボタンにしたいのです。 【カテゴリ1】|【カテゴリ2】|【カテゴリ3】|【カテゴリ4】 現在のコードは下記のようになっています。 (<form....></form>、echo,\,",;等は省いてあります) ($kindは、PHPコード内にカテゴリを選択する処理文があります) //商品のカテゴリ $category[0] = "選択"; $category[1] = "カテゴリ1"; $category[2] = "カテゴリ2"; $category[3] = "カテゴリ3"; $category[4] = "カテゴリ4"; $cat_num = count($category); +---------------------------------------------- <select name='kind'> for($i=0;$i<$cat_num;$i++){ <option value=". $i . (($i == $_POST['kind']) ? ' selected' : '') . "> " . $category[$i] . "</option> } </select>\n"; +----------------- これを submit にすると、 for($i=0;$i<$cat_num;$i++){ <input type='submit' name='kind' value=". $i . (($i == $_POST['kind']) ? ' ' : '') . "> } となりますが、その時【 】ボタンの中身は、【0】【1】【2】【3】【4】 といった、数字になります。(これは当然なんですが)、それでこれを、 なんとか、【カテゴリ1】|【カテゴリ2】|【カテゴリ3】|【カテゴリ4】といった submit ボタンに出来ないものでしょうか? 教えて下さい。 どうか、よろしくお願いします。

    • 締切済み
    • PHP
  • HTMLのフォームをHDMLに変換するソフトってありますか?

    以下のような一般的なフォームで、 単一選択結果を同じ画面に表示したいのですが どうすれば良いでしょうか? 単純なHDMLの例はインターネット上に落ちていますが少しだけ複雑になるとの例がないようです。。 HTML->HDMLに変換してくれるソフトはないでしょうか? ■一番好きな動物と度合いを選択してください <form name="fm" action="test.cgi" method="get"> <select name="a"> <option value="1">りす <option value="2" selected>たぬぼう <option value="3" selected >いぬ </select> <br> <select name="love"> <option value="1" selected>好き <option value="0" >大好き </select> </form>

  • formのselectを選んだら有効になる

    以下のようなフォームで、「選択してください」以外を選択したら 送信ボタンが「有効」になるようにしたいのですが、うまくできません。 どなたか分かる方、教えてください。 よろしくお願いします。 <form> <select name="city"> <option value="" selected>-- 選択してください --</option> <option value="1">千代田区</option> <option value="2">中央区</option> <option value="3">港区</option> <option value="4">新宿区</option> <option value="5">文京区</option> <option value="6">台東区</option> <option value="7">墨田区</option> ・ ・ ・ </select> <input type="submit" value="送信" /> </form>

  • JavaScriptで日付計算してアラート

    はじめまして。 どうやってJavaScriptでフォームの内容を取得して計算させるかわからなくて相談させてください。 単に今日の日付を取得して+10日後とかの表示はなんとかできたのですがなにぶん初心者ですのでそれ以上のことはさっぱりです^^; やりたいことはフォームで年、月、日を選択して検索ボタンを押すと検索のPHPにフォームの内容を送るというものです。 そこで、指定の日数以降、以前の日付を選ぶとアラートが出るようにしたいのです。(今日より30日以前と30日以降を選ぶとアラートがでる) ご教授のほどよろしくお願いします。 以下今まで作ったソースです。 できればこれに組み込みたいので・・・ <script type="text/javascript"> <!-- function FormCheck(Form) { Error = new Array(); i = 0; // 年の選択チェック if ((Form["yyyy"]) && (Form["yyyy"][0].selected == true)) { Error[i] = "年は必須項目です。"; i++; } // 月の選択チェック if ((Form["mm"]) && (Form["mm"][0].selected == true)) { Error[i] = "月は必須項目です。"; i++; } // 日の選択チェック if ((Form["dd"]) && (Form["dd"][0].selected == true)) { Error[i] = "日は必須項目です。"; i++; } // 未入力があればアラート if (Error.length > 0) { ErrorText = Error.join("\n"); alert ("未入力の項目があるので検索できません。\n\n"+ErrorText); return false; } } // --> </script> <form name="trace" action="kensaku.php" method="GET" onsubmit="return FormCheck(this)"> <TABLE><TR><TD> <select name="yyyy" size="1"> <option value=""></option> <option value="2008">2008</option> <option value="2009">2009</option> </select>年 <select name="mm" size="1"> <option value=""></option> <option value="01">01</option> <option value="02">02</option> <option value="03">03</option> <!-- ~~~~略~~~~~ --> <option value="12">12</option> </select>月 <select name="dd" size="1"> <option value=""></option> <option value="01">01</option> <option value="02">02</option> <option value="03">03</option> <!-- ~~~~略~~~~~ --> <option value="31">31</option> </select>日 </TD></TR> <TR><TD><INPUT TYPE="submit" name="submit" VALUE="検索"></TD></TR> </TABLE>

専門家に質問してみよう