
いろいろ検索したのですが、それらしきものが無いように思うので、
陳腐な質問をしているかもしれませんが、よろしくお願いいたします。
●質問1、
現在、下記の「■例1、」のようにページが開いた時点で
自動でクリックしてフォームデータを送信できるようにしています。
■例11、
<html>
<body>
<form name="nform" action="a.php" target="blank" method="POST">
<input type="hidden" value="a" name="1">
<input type="hidden" value="b" name="2">
<input type="hidden" value="c" name="3">
<SCRIPT language="JavaScript">document.nform.submit();</SCRIPT>
</form>
</body>
</html>
この同じページに、下記のような全く違うaction先に、内容の一部だけ違う別のフォームを書いて、
同じように自動クリックしてデータを送る方法はありますでしょうか?
出来れば、2つだけではなく、複数のフォームを配置したいのですが・・・
<html>
<body>
<form name="nform2" action="b.php" target="blank" method="POST"> →※ここの action=値が違う。
<input type="hidden" value="a" name="1">
<input type="hidden" value="b" name="2">
<input type="hidden" value="f" name="3"> →※ここの value=値だけが違う。
</form>
</body>
</html>
色々試しておりますが、ほとんど素人のためいまだに苦戦しております。
●質問2、
また、このやり方では無事に2つに送信できたとしても、target="blank"で2つのページが開いてしまうと思うのですが、
それを防ぐ方法(ひとつだけ開く)などはありますでしょうか。
JavaScriptはoffにしてないという条件下で動かす方法を考えております。
素人発想で申し訳ありませんが、何か解決法がありましたらよろしくお願いいたします。
No.3ベストアンサー
- 回答日時:
<form action=a target=samename> ... </form> <!-- ひとつだけ開くため target を同じ名前にする -->
<form action=b target=samename> ... </form>
<form action=c target=samename> ... </form>
<script>
function listener(){
var fs = document.forms;
for (var i=0; i < fs.length; i++) { // 複数フォームすべてを対象
fs[i].submit();
}
}
addEventListener('DOMContentLoaded', listener, false);
</script>
補足
* 複数フォーム送信しても一つだけ開く場合は、最後のフォームについてのみ表示されます。
* 自動 submit で別画面表示を行うと、ブラウザによっては警告表示されますので注意してください。
* 送信後の画面を開く必要が無いなら、フォーム内容を AJAX 送信するのが定番
私のやりたいことを組んでいただいた上に、コードの記載まで頂き、ありがとうございます。
一度、テストさせていただきます。
ちなみに、大変、恐れ入りますが、このコードの実際の使い方は下記のような記載方法でよろしいのでしょうか?
本当に素人で申し訳ありませんが、お教えいただけましたらありがたく思います。
よろしくお願いいたします
※action=の部分は仮定のURLに変更しております。
<html>
<body>
<script>
function listener(){
var fs = document.forms;
for (var i=0; i < fs.length; i++) { // 複数フォームすべてを対象
fs[i].submit();
}
}
addEventListener('DOMContentLoaded', listener, false);
</script>
<form name="nform" method="POST" action="https://EEE.com/aaa/regist.php" target="_blank>
<input name="direct_reg_code" type="HIDDEN" value="no1" />
<input name="email" type="HIDDEN" value="[[email]]" />
<input name="days" type="HIDDEN" value="30" />
</form>
<form name="nform2" method="POST" action="https://EEE.com/bbb/regist.php" target="_blank>
<input name="direct_reg_code" type="HIDDEN" value="no2" />
<input name="email" type="HIDDEN" value="[[email]]" />
<input name="days" type="HIDDEN" value="20" />
</form>
</body>
</html>
このような記載でよろしいでしょうか。
よろしくお願いいたします
No.4
- 回答日時:
No.3 のお礼の補足
すべての要素 form の属性 target に、特殊キーワード以外で独自の名前を付けてください。
参考
https://developer.mozilla.org/ja/docs/Web/HTML/E …
ブラウザは target という名前が付いた画面(ウィンドウ or タブ)が、
無ければ新しく画面を開き (1回目のsubmit)
有るなら画面を上書きします (2回目以降のsubmit)
余談
画面(ウィンドウ or タブ)ではなく iframe に表示するのも手です
さらに余談
昨今の流行では別画面を開くのは悪手とされていますので、
やはり AJAX によるフォーム内容のみ送信する方法を強くお勧めします
参考
https://www.google.co.jp/search?q=jquery+ajax+fo …
リンクまで貼って頂きありがとうございます。
本当は別ページを開かなくても全く問題はないのですが、
私自身の勉強不足にて「AJAX によるフォーム内容のみ送信する方法」が
全く理解できていない状態でございます。申し訳ございません。
まず、お教えいただきました方法を試させていただきたく思います。
ご配慮いただきまして、本当にありがとうございます。
テストが完了次第、うまく動いたかどうかのご報告をさせていただきます。
感謝します。
No.2
- 回答日時:
やろうとしていることは、ページを開いてもどって別ページを開くことですから
それは無理。
teratailにもマルチしているようですが、とりあえず送ったあとの結果をみる
必要がないならajaxで処理するのがよいでしょうし、
そうでなければblankで開いてあとから閉じるとか、iframeで対応するとか
やりようはありますが、所詮姑息な手段です
そもそも複数におくるという発想自体がまちがいです
No.1
- 回答日時:
こんにちは
お求めの回答ではないと思いますが・・・
>現在、下記の「■例1、」のようにページが開いた時点で
>自動でクリックしてフォームデータを送信できるようにしています。
・・・ということは、最初のページを開く処理そのものが無駄で、ユーザにとっては最初に何かが表示されるまでの待ち時間を無駄に浪費されているということになります。
hiddenの固定値を送っているだけのようなので、一往復分の通信の意味がないですね。
最初のリクエストに対して、submit後の結果を触接返すようにしておけば、無駄な送受信は無くなるし、ユーザにとっても快適になるものと想像します。
>内容の一部だけ違う別のフォームを書いて、
>同じように自動クリックしてデータを送る方法はありますでしょうか?
>出来れば、2つだけではなく、複数のフォームを配置したいのですが・・
ブラウザのsubmit処理は、送信後のレスポンスを表示するようにできています。
仮に、複数に送ることができたとしても、矛盾した動作になってしまいます。
全体がご自身のサイトであるなら、構成を組み替えることが可能でしょうから、全部をまとめて受信するabcd.phpなどを作成しておいて、そこで内容をチェックした上で、処理を分散したければサーバサイドで分散すればよいだけではないでしょうか。
(といっても、ご提示のような固定値を送るだけなら、チェックや処理をする必要もないので、いきなり結果を返すことが可能なはずなんですけれど。更に言うなら、データを送る必要もないように思えますね。)
>それを防ぐ方法(ひとつだけ開く)などはありますでしょうか。
ブラウザ側でsubmitする限りは、一つのurl対象ということになります。
データを送れさえすれば良いのであれば、ajaxで送信することは技術的には可能ですが、そのような処理をする必要もないと思われるので、上記のようにデータをまとめて送るようにしておくのが普通の方法ではないでしょうか。
特に、ご提示のように「固定値を送るだけ」という内容であるなら、多くの処理(クリックや送受信そのもの)を省略できそうな気がします。
(データそのものが不要なのではないかという気が多分にしますけれど…)
結果として、レスポンスの大幅な向上が図れることになりませんか?
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- JavaScript ①入力フォーム→②確認表示画面→③送信完了画面のコードを書いているのです、 入力フォームから受け取っ 2 2022/05/10 16:45
- JavaScript フォームが空欄の時にフォームの外をクリックすると、エラーが出るコードを調べています。 1 2023/06/25 11:51
- PHP PHPで画像の渡しが上手く行きません。 1 2023/02/02 09:39
- PHP 入力した部分を表示させたまま(保持)するにはどうすれば良いでしょうか? 1 2023/01/25 11:14
- JavaScript sessionStorageを調べています。 1 2023/06/20 12:41
- PHP PHPでCookieを使った訪問回数について 1 2023/05/28 14:10
- HTML・CSS 私の能力からして間違っていないような気がします。 4 2022/09/30 13:24
- HTML・CSS ボタンをクリックした時に、入力フォームのすぐ下部に、「入力欄が空白です」というテキストメッセージが表 1 2022/04/27 16:25
- JavaScript 入力フォームの javascript で メールアドレスの正規チェックをを行い、ボタンをクリックして 2 2022/04/27 16:06
- HTML・CSS ただいま勉強始めたての初心者です。フォームを縦並べにしたいです。 2 2022/11/20 17:18
このQ&Aを見た人はこんなQ&Aも見ています
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
MacIE5でフォームを送りたい。...
-
cleartextを二つする
-
GoogleMapsから緯度経度をPHPに...
-
Javascriptでlocation.hrefが妙...
-
chromeでフォームの値が取得で...
-
jQuery UIについて
-
同意チェックボックスはひとつ...
-
指定したタグを書き換えるには?
-
ENTERキーを無効にしたいのです...
-
return trueとreturn falseの用...
-
CSVデータをツリー表示させたい
-
プルダウン選択を変更すると、...
-
ラジオボタンにタブインデック...
-
<JavaScript>tableタグを入力不...
-
空の<td>タグ内にスペースを挿...
-
特定<table>内の<td>の色を変える
-
JavaScript から I'm Feeling L...
-
オフになっているチェックボッ...
-
ボタンに任意の動作をさせてテ...
-
JavaScript フォームでのラジオ...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
submitした値を返したい
-
別ウィンドウへのsubmitの挙動...
-
iframe内のformをサブミットす...
-
1つのページにformを2つ設置。2...
-
radiobuttonとbuttonを組み合わ...
-
JavaScript:現在フォーカスの...
-
Javascriptでlocation.hrefが妙...
-
C# 配列などの受け渡し
-
submitボタンを表示することな...
-
別窓ウィンドウから親ウィンド...
-
タブキーでなくエンターキーで...
-
inputのvalueを変数として使うには
-
フォームのvalueに配列を格納す...
-
FormのonsubmitでJavaスクリプ...
-
submitボタン押下後、disabled...
-
指定したタグを書き換えるには?
-
リンク先アドレスの一部にテキ...
-
enterについて2
-
フォームが空欄の時にフォーム...
-
ファイル選択と同時にアップロ...
おすすめ情報