• 締切済み

複数のformに対して自動送信(ボタンを押した振る舞い)をする方法

http://oshiete1.goo.ne.jp/kotaeru.php3?q=949775 上記の質問や http://oshiete1.goo.ne.jp/kotaeru.php3?q=1220040 の発展版になりますが、ひとつのformに対しては上記の質問に対する回答にあるようにdocument.FORM.submit();やclick()でできるのですが、同じファイル内にある複数のformに対して同時に自動的に送信したいと思い、いろいろ試してみたのですがうまくいかず、いい方法が思い浮かびません。 formの数が多いのでformごとにファイルを用意するのは避けたいのですが、うまくできる方法はないでしょうか?もうひとつファイルをつくって制御する、というふうなものでも構いません。 また、同時に送信、と書きましたが複数のformに対してそれぞれ送信ができればOKなので、少しずつ時間がずれても構いません。 googleでも検索してみたのですが調べ方がよくないのかこのような事例がなかなか見当たらず、ここに質問した次第です。 なにかこれだ!というものがありましたらぜひご回答いただけたらうれしいです。

みんなの回答

  • 9arabi
  • ベストアンサー率32% (140/433)
回答No.2

http://okweb.jp/kotaeru.php3?q=773743 を参考にするならば、 説明は可能です。 document.forms[1].elements[0].value = this.form.elements[0].value; で書かれている「this.form」というのは、この<input type="button">の置かれている<form>のことですね。 その、elements[0]というからには、 <form>の直下にある <input>タグのことです。これは、もっと詳しく書くと、 <input type="text"> のことですよね。このformから見たとき、elementsの数を数えると一番最初にあるのがこれですから、0から数えて、この<input>はelements[0]となります。 配列はご存知ですか? 上記のサンプルを書き換えると以下のようになります。 <form name="frm1"> <input type="text" name="txt1"> <input type="button" onclick=" document.frm2.MT.value = this.form.txt1.value; document.frm2.submit(); document.frm3.q.value = this.form.txt1.value; document.frm3.submit(); "> </form> <form method="get" name="frm2" target="_blank" action="http://search.goo.ne.jp/web.jsp"> <input type="hidden" name="MT"> </form> </form> <form method="get" name="frm3" target="_blank" action="http://www.google.com/search"> <input type="hidden" name="q"> </form> これで分かるでしょうか。 また、それぞれのフォームのターゲットが_blankとなっているのは、もちろん、 同じフォームに送ってしまうと一つ目の処理が終わらないうちに次の処理が送られてきてしまうからですね。 ということは、2つの別ウインドウが開いてしまうことになります。

tomato_tomato25
質問者

お礼

丁寧な解説ありがとうございます!とてもわかりやすいです。 私も試行錯誤しながら少しずつわかってきたのですが、 とてもわかりやすい解説であらためて理解できました。

tomato_tomato25
質問者

補足

ボタンを押して複数フォームの一括送信は理解できたのですが、これをボタンを押さずに送信できるようになんとかならないかと試行錯誤しています(ファイルを開いたとき、など)。 JavaScriptについて調べているのですが、機能一覧みたいなのは多いのですが、「~をするには、どうすればいいか?」という資料がなかなか見つからなくて悪戦苦闘しています(ほかの言語でもそうなんですが・・・)。いろんな機能を試しながら理解するほうなので、そういうふうな感じで解説がされているHPや書籍がありましたら教えていただけるとうれしいです。 配列を利用し、onclick="sousin()"として動かす簡単なスクリプトをつくりました。 この場合フォーム20個分が送信されます(ウィンドウも20個開きます)。 function sousin(){ for (i = 1; i <= 20; i++) { document.forms[i].elements[1].value = "16時の会議は第1会議室になりました"; document.forms[i].submit(); } }

  • akamanbo
  • ベストアンサー率17% (462/2680)
回答No.1

私が昔似たような質問をしたことがあります。 ご希望に沿うかわかりませんが、参考になれば。 http://okweb.jp/kotaeru.php3?q=773743

tomato_tomato25
質問者

お礼

早速のご回答ありがとうございます! これなんです!このソースの複数同時検索はできました。 ですが・・・ > document.forms[1].elements[0].value = this.form.elements[0].value; > document.forms[1].submit(); > document.forms[2].elements[0].value = this.form.elements[0].value; > document.forms[2].submit(); ここの意味がさっぱりわからず、私が利用したいformで 応用ができずにいます。 (forms[2].elements[0]あたりに対応する値がわかりません) しかしformタグで target="_blank"が使えるとは知りませんでした。 これはヒントになりそうです。 まだ解決はできていませんが少し前進しました。ありがとうございます。 引き続き私の方でも試行錯誤して解決すれば報告したいと思います。

tomato_tomato25
質問者

補足

自己レスですが > document.forms[1].elements[0].value = this.form.elements[0].value; > document.forms[1].submit(); > document.forms[2].elements[0].value = this.form.elements[0].value; > document.forms[2].submit(); このソースの > document.forms[2].elements[0].value = this.form.elements[0].value; はformの入力値が代入されるようなのでこの行をそのままとってしまい、 > document.forms[2].submit(); だけにするとうまく行きました。 しかしついうまくできた!と思ってうっかり忘れてしまっていたのですが、このソースではボタンを押す必要があります。 ボタンを押す振る舞いも自動化したいと思っています。 (ファイルを起動、またはURLにアクセスすると自動的にform送信するようにしたい) 質問で最初の示したURLの質問者が同じようなところでつまずかれて、補足欄にて「解決しました」と書かれているのでその解決法が知りたいのですが・・・私も document.form1.element1.click(); document.form2.element2.click(); と書いても後の方しか実行されず困っています・・・。

関連するQ&A