質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

HTML

HTMLとは、ウェブ上の文書を記述・作成するためのマークアップ言語のことです。文章の中に記述することで、文書の論理構造などを設定することができます。ハイパーリンクを設定できるハイパーテキストであり、画像・リスト・表などのデータファイルをリンクする情報に結びつけて情報を整理します。現在あるネットワーク上のほとんどのウェブページはHTMLで作成されています。

Q&A

解決済

2回答

21275閲覧

複数フォームの内容を一度に送信する方法

msx2

総合スコア174

JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

HTML

HTMLとは、ウェブ上の文書を記述・作成するためのマークアップ言語のことです。文章の中に記述することで、文書の論理構造などを設定することができます。ハイパーリンクを設定できるハイパーテキストであり、画像・リスト・表などのデータファイルをリンクする情報に結びつけて情報を整理します。現在あるネットワーク上のほとんどのウェブページはHTMLで作成されています。

2グッド

4クリップ

投稿2016/05/11 05:19

編集2016/05/12 08:30

一つの大きなフォームがあり、内容は商品に関する情報と画像データです。
別の質問でアドバイスを頂き、このフォームの画像を登録する部分だけ別のフォームにしたいのですが、デザインの都合で画像ファイルを選択する項目はフォームの中ほどにあります。

※このソースはあくまでも簡略化したものであり、本当はかなりの数の入力項目を含んでいます

HTML

1<form name="form1"> 2 <input type="text" name="txt1"> 3 <input type="file" name="img"> 4 <input type="text" name="txt2"> 5 <input type="submit"> 6</form>

これをフォーム要素の入れ子を使わずにこのように分割します

HTML

1<form name="form1"> 2 <input type="text" name="txt1"> 3</form> 4 5<form name="form2"> 6 <input type="file" name="img"> 7</form> 8 9<form name="form3"> 10 <input type="text" name="txt2"> 11 <input type="submit"> 12</form>

分割した場合にform1とform3をまとめて送信しようとしたらどの様な方法があるでしょうか?


(2016/5/12:追記)

送信前にJavascriptを使ってform1にform3の要素を追加し、最終的にはform1をsubmitすることで実現できそうですが、要素数が多いため記述が大変です。
簡単に2つのフォームを合体させることができればいいのですが。

もともと1つのフォームとして送信すべきものを2つに分割するという考え方が間違っているのでしょうか?

YTT, act823👍を押しています

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答2

0

自己解決

本質問の解決策として、Javascriptを使ってクリックイベントを拾い、form1の要素をform3へ1つずつコピーする方法があると思います。まとめて簡単にコピーする方法も探してみましたが見つけることができなかったので地道にコピーしていくしかないのかも知れません。送信する要素数が多くなければ問題ないと思います。

ただし今回はフォームの分割をしませんでした。
結論としては意味的に1つのまとまりとなっているフォームは分割すべきではないと考えたからです。HTMLのフォームは複雑な処理をするようにはできていないと思います。
また、送信前にJavascriptを使ってフォームのバリデーションも行っていること、バックエンド側でも1つのフォームオブジェクトとして取り扱っているので分割することで他のプログラムに影響を及ぼすことを避けたかったという事情もあります。

フォーム内に送信したくない項目がある場合(今回であればInput type="file"要素)、name属性を未設定にすることで送信対象から外れるみたいです。私の課題はこれで解決しました。

投稿2016/05/17 09:51

編集2016/05/17 09:52
msx2

総合スコア174

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

単純に考えれば form要素を入れ子にして input[form] の値を切り替えれば可能ですが、IE未対応になりますね、

そもそも論としてなぜsubmitボタンでフォーム送信するinput要素を事前にJavaScriptで送信する必要があるのでしょうか。
前スレでは「JavaScriptで事前送信してsubmitボタンでも二重送信してしまう」と仰っていましたが、それならJavaScriptで事前送信しなければ良いのでは、と思います。
その機能を実装する必要がある目的/背景を明らかにすると見えてくるものがあると思います。

Re: msx2 さん

投稿2016/05/11 05:43

編集2016/05/11 05:43
think49

総合スコア18162

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

msx2

2016/05/11 05:52

画像ファイルは数がたくさんあり非同期で送信したいという要望があります。 二重で送信しないように本スレでは画像ファイルを含むform2は送信対象から外し、一つの操作(formのsubmitでもボタンのクリックでも何でもいいです)で複数のフォームを送信する方法を質問させていただきました。 よろしくお願いします。
think49

2016/05/11 23:32

その方法が最善だと思います。 一つのinput要素を同時に2つのform要素に関連付ける事は出来ないので<form>で関連付けるならform属性を付け外しするか、親となるform要素を入れ替える以外にありません。 form属性はIE非対応なので除外するとして親となるform要素を入れ替えるのはややコストが重いです。 また、KavaScript無効化時には一つのformとなるマークアップであれば期待通りに動作するので現状が最善だと思います。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問