• 締切済み

関数を順番に呼び出したい

一度、ここで質問をしたのですが、わたくしの勘違いで質問締め切ってしましました。 再度の投稿をお許しください。 関数test()の中で、関数testA 、関数testBの順番で呼び出したいと思っています。 関数testAで、return true;を入て、if文でtestAがtrueだったらtestBを呼ぶという処理を行う場合、どこにreturn testを入れたらよいのか迷っています。 またtestAの最後にtestBを入れる場合は、submit()の前も後もどちらに書いても呼ばれないですよね。 ちなみに、testA,testBは以下のような感じです。 testA(){ action="××update××"; method="post"; target="FRAMEH"; submit(); } testB(){ action="××insert××"; method="post"; target="FRAMEH"; submit(); }

みんなの回答

  • arexis
  • ベストアンサー率66% (66/99)
回答No.6

こんにちは。 駄目だったんですね^^; 各処理の最後がsubmit()だったんですか。 JSPとか絡んでくると私にはわからない範囲になっちゃいますが 単純にJavaScriptの話としてなら 1つのHTMLフォームの内容をJavaScriptでselfウィンドウではなく、 他のフレームに対して2回別々に送信して処理をさせる。 selfウィンドウは書き換えないと言うなら。 単に送信内容をコピーしておけば良いだけだと思うのですが、 test(){ var el_values = []; /* ここでフォームのelements配列をループ処理して値を el_value に保存 */ if( testA() ){ /* ここでel_values配列の値をフォームに戻す */ testB() } } testA関数では submit()の後に return trueで。 こんな単純な話とは全然違うのかな? 的はずれてたらすみません^^;

HAWAI777
質問者

お礼

ありがとうございました。 勉強になりました。

全文を見る
すると、全ての回答が全文表示されます。
回答No.5

問題は submit()がアクセス先のWebページから返答があって、 ページが読み込まれる前に終了してしまうということにあると思います。 で、自分なら次のようにします。 まずiframeをHTMLに追加します。 これは裏側で使うものなので、スタイルシートなどで見えないようにします。 また、name/idを設定するとともにonLoadを定義します。 <iframe name="hidden_frame" id="hidden_frame" style="display: none; visibility: hidden;" onLoad="onFrameLoad();"></iframe> のような感じです。 その上でtest()をtestAのみを実行する関数に変更し、 それを呼び出すフォームのtargetが今はFRAMEHになっていますが、それに上で作成したiframeのnameを指定します。 最後に上で作成したiframeのonLoadに指定した関数の中でtestBを呼び出す様にします。(直接onLoadにtestBを指定しても構いません) 多分、もともとのtestBだとsubmit()対象のformが分からないので、どのformをsubmitするか分かる様、 formにidを振って var form = document.getElementById('formのID'); form.action="××insert××"; form.method="post"; form.target="FRAMEH"; form.submit(); のようにする必要があるかと思います。 自分は手っ取り早くこういうことをしたい場合は、 iframeが好きなので上のようにしますが、 AJAXでページ読み込み終了を判定する方法はいろいろあると思うので たとえば「AJAX 読込 終了 判定」などで検索してみると良いと思います。

全文を見る
すると、全ての回答が全文表示されます。
  • HIRSYU
  • ベストアンサー率51% (45/87)
回答No.4

submitの動きを要約すると、 「submit実行」→「サーバー処理」→「サーバーがHTMLを返す」→「ブラウザがページを更新」 となり、“submitが正常に完了=ページ更新される(処理中のJavaScriptも中断)”です 実際の仕様などがわからないので、なんとなくですが、クライアント側で制御するのではなく、サーバー側でやるべきだと思います。 クライアント側で制御したいのであれば、AJaxの非同期通信あたりを勉強してください。 (submitではなく、XMLHttpRequestやActiveXObject("Msxml2.XMLHTTP.6.0")を使って送信する)

全文を見る
すると、全ての回答が全文表示されます。
  • auty
  • ベストアンサー率58% (284/486)
回答No.3

>>> testBのactionしかsubmitされていないのではないでしょうか。 その通りです。 submitとはなんでしょうか。 前回書いたように <<< 関数testA()でsubmitしたら、それで関数test()は終わるはずです。 という具合に私は解釈しております。 一度のクリックで続けて2回submitはできないと考えています。 いかがでしょうか。 と書いたところで、もう1度最初の文を確認しますと、どうやらサーバに1度アクセスした結果に基づいて、 自動的にもう一度サーバに1度アクセスしたようですね。 私には、1度目の結果を見て別のクリックをすることしか思い当たりません。 残念ながらギブアップです。

全文を見る
すると、全ての回答が全文表示されます。
  • auty
  • ベストアンサー率58% (284/486)
回答No.2

>>> この方法でやってみましたが、testA()がsubmitされないようです。 この意味がはっきりしませんが、testA()が実行されないということでしょうか。その場合は、alert("A");等を関数testA()に入れることで確認できます。 ----------------------------------------------------- testA(){ alert("A"); action="××update××"; method="post"; target="FRAMEH"; if(送信するときの条件){ return true; } else { return false; } } ----------------------------------------------------- これは、関数test()の    f(testA()){ のところで実行されます。 もし、関数testA()でsubmitしたら、それで関数test()は終わるはずです。つまり、関数testB()には行かないことになります。 行っていることのもう少し詳しい状況を、出来るだけ正確にお知らせください。

HAWAI777
質問者

補足

testAは実行されています。 やりたいことは、testAでもtestBでもsubmitしたいのです。 教えていただいた方法ですと、testAの関数が実行されて、次に testBが実行されて、最後にformで実行しますが、testBのactionしか submitされていないのではないでしょうか。

全文を見る
すると、全ての回答が全文表示されます。
  • auty
  • ベストアンサー率58% (284/486)
回答No.1

次の点を仮定します。 ------------------------------------------------------------- ・ フォームの名前が"myForm"となっている。 ・ フォームから関数test()が呼び出される。 ・ 送信するときの条件は、関数testA()のみで行える。 ・ 関数testB()では、チェックする必要が無い。   (もし必要なら方法は関数testA()と同様です。) ------------------------------------------------------------- そのとき、 ------------------------------------------------------------- 1.関数testA(),testB()のsubmit();は付けてはいけません。 2.関数test()の //...は、処理があれば記入します。 3.関数testA()の「送信するときの条件」をきちんと記入してください。 ------------------------------------------------------------- test(){ //... if(testA()){ testB(); } else { return false; } //... document.myForm.submit(); } testA(){ action="××update××"; method="post"; target="FRAMEH"; if(送信するときの条件){ return true; } else { return false; } } testB(){ action="××insert××"; method="post"; target="FRAMEH"; }

HAWAI777
質問者

補足

ありがとうございます。 この方法でやってみましたが、testA()がsubmitされないようです。

全文を見る
すると、全ての回答が全文表示されます。

関連するQ&A

  • 2番目の関数が先に実行されてしまうことってあるの?

    javascriptで、testという関数の中で2つの関数を呼び出しています。 testAとtestBではそれぞれデータベースに接続しています。 そこで質問なのですが、testBは、testAの処理が全て終了してから 実行されると思っていたのですが、 testAの処理途中からtestBが実行されることはあるのでしょうか? testAでは、updateのSQLが流れて、testBではinsertのSQLが流れます。それぞれ、処理の最後には、JSPを更新しています。 testAの処理がされずに、testBの処理だけされている状態になることがあるのです。 testBの最後の更新のタイミングが、testAの処理よりも早く終わってしまっているのかなと思いまして。 function test(){ testA(); testB(); }

  • 実行の順番を教えてください。

    現在JAVAの学習をおこなっていて、参考書で勉強しています。 しかし、以下の3つのソースコードはどの順番で実行されているか理解できておりません。 すみませんが、実行の順番を教えて頂けないでしょうか。 実行の順に数字を振ったりしていただけますと特に嬉しいです。 お願いします。 ※サンプル1 class testA{ testB b; testA(){ b=new testB(this); } } class testB{ testA a; testB(testA a){ this.a=a; } } class testAll{ public static void main(String args[]){ new testAll().banana(); //ソースコード } void banana(){ testA test = new testA(); } } ※サンプル2 public class A{ public static void apple(Integer i){ int ta =i.intValue(); ta+=3 ; i=new Integer(ta); } public static void main(String args[]){ Integer i = new Integer (0); apple(i); System.out.println(i.intValue()); } } ※サンプル3 public class Test{ public static void main (String args[]){ class orange{ public int i =9; } Object o=(Object)new orange(); orange orange = (orange)o; System.out.println("i="+orange.i); } }

    • ベストアンサー
    • Java
  • javascriptを使ってパラメータを送る

    GETで送信する際、パラメータを隠す方法を調べていて http://oshiete.nikkeibp.co.jp/kotaeru.php3?q=1304243 を参考にさせていただきました。 testA.php while($list = mysql_fetch_array($rst)){ print" <form name='test' action='testB.php' method='POST'> <input type='hidden' name='text1' value='$ID'> <input type='hidden' name='text1' value='$now'> <script language='JavaScript'> <!-- document.write('<a href=\"#\" onClick=\"document.test.submit()\">' + '$list[name]</a>'); //--> </script> <noscript> <input type='submit' value='SUBMIT'> </noscript> </form>"; } 上記回答者様のコードを試したところ、期待通りの結果が得られました。 しかし、testA.phpからtestB.phpへリンクできません。 document.test.submit()のところに.forms.testを追加してみましたが ステータスバーにエラーが発生しましたとなります。 解決済みの問題を再度投稿して申し訳ありませんが、よろしくお願いします。

    • ベストアンサー
    • PHP
  • onClickで関数呼出し後に、結果に応じてsubmitを実行する方法

    JavaScriptで、 function func() {  if (a==0) {   alert("処理しない");   return false;  }  return true; } と、a=0ならfalseを返し、それ以外ならtrueを返す関数を定義しています。 そして、FORMタグで <FORM NAME="FormName" ACTION="next.html"> <INPUT TYPE="button" VALUE="next" NAME="button1" onClick="return func();submit();"> </FORM> と記述しています。 要は、ボタンを押下した際にfunc関数がtrueを返せば、next.htmlに 遷移させたいのですが、上記記述では、遷移しません・・・ onClick部分にonClick="return func(),submit();"と記述した場合、 func関数の実行結果がtrueでもfalseでも遷移してしまいます。 そこで、なんとなくonClick="return func()&&submit();"と記述してみたところ、 func関数がtrueの時のみうまく遷移するようになりました。 これは偶然そう動作しているのでしょうか、それとも上記は正しい記述方法なのでしょうか? 正しい記述方法ならいいのですが、上記以外に正式な記述方法があれば 教えていただけないでしょうか? ※TYPE="submit"にすればいいとは思うのですが、buttonで実現したいと 考えております。

  • formの複数動作について

    HTMLの初心者で、基本的なことがよくわかりません どなたかお教え頂ければ助かります <form 文を使用して2つのactionを区別してsubmitしたいのですが、 実際にはtest01.jspとtest02.jspをsubmitですが(form文の内のinput文の変数をJSPで受信する為) 、htmlの基本動作で可能です イメージ <form name="form1" action="test01.html" method="post" target="new_window1" > <form name="form2" action="test02.html" method="post" target="new_window2" >   <input type="submit" value="動作確認1" > <!-- form1をsubmitしたい --> <input type="submit" value="動作確認2" > <!-- form2をsubmitしたい --> </form> </form>

  • formの送信ボタンクリック後、別ウインドウ表示

    お世話になります。 現在下記の指定でPDFを表示しています。 <INPUT type="submit" name="submit" value="送信" onClick="form.action='tcpdf/pdf.php';return true" class="button_order"> これをクリック後、別ウインドウでPDFを表示したいのですが、 onClick="form.action='tcpdf/pdf.php';return true"の部分を onClick="form.action='tcpdf/pdf_sample.php';target='_blank'"とかにしても うまくいきせん。 ボタンはもう一つあるので、 <INPUT type="submit" name="submit" value="戻る" onClick="form.action='201504_1_2.php';return true" class="button_re-selection"> 出来れば、送信ボタンのみの設定を別ウインドウ表示にしたいです。 よろしくお願いいたします。

    • ベストアンサー
    • HTML
  • submit関数の使い方

    javascript部分 function sendform(formname){ document.formname.submit(); } html部分 <form action="test.html" method="post" name="form1"> <input type="text" name="textvalue" value="1"> </form> <a href="javascript:void(0)" onclick="sendform('form1'); return false;">click1</a> <form action="test.html" method="post" name="form2"> <input type="text" name="textvalue" value="2"> </form> <a href="javascript:void(0)" onclick="sendform('form2'); return false;">click2</a> 今は、上記のように書いています。引数でフォーム名を渡し、その値によって送信フォームを変えたいのですがうまくいきません。if文を使って if(formmei=="form1"){ document.form1.submit(); }else if(formmei=="form1"){ document.form2.submit(); } という方法も考えたのですが、フォーム名だけ変えることができないかと考えています。 よろしくお願いします。

  • onSubmitで2つの関数を実行したい

    下記のような送信フォームでformCheck()と同時にもう一つ関数を実行させることは可能ですか。その場合にはどのように書けばよろしいでしょうか。 <FORM NAME="myform" ACTION="next.html" METHOD="post" onSubmit="return formCheck()"> これを <FORM NAME="myform" ACTION="next.html" METHOD="post" onSubmit="★ここで2つできる?★">

  • 下記のような関数から外部からの戻り値を返したいのですが

    下記のような関数から外部からの戻り値を返したいのですが 良い方法はございませんでしょうか? 例えば trace( test( "test" ) ); このように戻り値を返す関数にしたいです。 function test( strData:String ):String { var variables:URLVariables = new URLVariables(); variables.data = strData; var request:URLRequest = new URLRequest(); request.url = "http://test.asp"; request.data = variables; request.method = URLRequestMethod.POST; var loader = new URLLoader(); loader.addEventListener(Event.COMPLETE , function(event) { var retValue:String = new String(event.target.data); }); loader.load(request); //return ???? }

    • ベストアンサー
    • Flash
  • 関数から関数を呼び出したときのリターン処理について

    宜しくお願いいたします。 ユーザー定義関数からユーザ定義関数を呼び出す必要があり 以下の様にしてみたところ function chk($value) {    if ($value>0) {       return TRUE;    }    return FALSE; } function test(){    $a = 0;    $b = -1;    $c = 2;    $txt = '';    if (chk($a)) {       $txt .= 'aはhoge<br>';    }    if (chk($b)) {       $txt .= 'dはhoge<br>';    }    if (chk($c)) {       $txt .= 'cはhoge<br>';    }    return $txt; } 最初の chk($a) で処理が終わってしまいます。 この場合 chk() の return が test() をも止めてしまっているのでしょうか? return で調べて見ると 呼び出し元のスクリプトに戻る というような解説だったので test() に戻って処理の続きをしてくれる と思ったのですがうまくいきません。 これを return $txt; まで処理させるにはどのようにしたらよいでしょうか? できれば chk() をTRUE、FALSEの判定に使いたいと思います。 何卒ご教授のほどよろしくおねがいします。

    • ベストアンサー
    • PHP
このQ&Aのポイント
  • ローランドのGT-1で分厚く歪ませるためのプリアンプ設定方法を教えてください。
  • GT-1のプリアンプ設定をいくつか試しましたが、うまくいきません。どうぞよろしくお願いいたします。
  • ローランドのGT-1で分厚く歪ませる方法について詳しく知りたいです。お知恵をお貸しください。
回答を見る