電子書籍の厳選無料作品が豊富!

 失礼致します。
質問させてください。

今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

A 回答 (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>
    • good
    • 0
この回答へのお礼

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

お礼日時:2006/08/14 10:35

フォームはひとつで、



<button onclick="フォーム.submit()">更新</button>

を好きなだけ好きなところに置いたらよろしいかと。

フォーム.submit()の"フォーム"は適宜書き換えてくださいね。

この回答への補足

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

補足日時:2006/08/11 19:32
    • good
    • 0

がると申します。


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

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

お礼日時:2006/08/14 10:45

上半分に関しては不可です。



下半分に関してですが、
1.フォームを一つにする。
2.submitボタンは一つだけ。残りは全てtype="button"で作成。
   → 何なら全部type="button"で作成。
3.各ボタンにjavascriptのonclickイベントを記述。

というような流れで実現できませんかね?

この回答への補足

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

補足日時:2006/08/11 18:51
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!