• ベストアンサー
  • 困ってます

名無しformの操作

以下のような、元々名前のないformが複数ある場合にボタンイベントで発生した共通のtest()関数内で処理を行う場合、どのフォームか識別できる方法はあるのでしょうか? テスト1、をクリックした場合、テスト1のフォームの操作を行いたいです。 <script ....... function test(???) { document.どのフォームかわからない.action="/index.cgi"; document.どのフォームかわからない.a.value="1"; document.どのフォームかわからない.submit(); } </script> <form> <input type="hidden" name="a" value=""> <input type="button" value="テスト1" onclick="javascript:test(???)"> </form> <form> <input type="hidden" name="a" value=""> <input type="button" value="テスト2" onclick="javascript:test(???)"> </form> <form> <input type="hidden" name="a" value=""> <input type="button" value="テスト3" onclick="javascript:test(???)"> </form>

共感・応援の気持ちを伝えよう!

質問者が選んだベストアンサー

  • ベストアンサー
  • 回答No.1
  • naktak
  • ベストアンサー率36% (784/2138)

<script ....... function test(obj) { obj.action="/index.cgi"; obj.a.value="1"; obj.submit(); } </script> <form> <input type="hidden" name="a" value=""> <input type="button" value="テスト1" onclick="javascript:test(this.parentNode)"> </form> <form> <input type="hidden" name="a" value=""> <input type="button" value="テスト2" onclick="javascript:test(this.parentNode)"> </form> <form> <input type="hidden" name="a" value=""> <input type="button" value="テスト3" onclick="javascript:test(this.parentNode)"> </form> か <script ....... function test(num) { document.forms[num].action="/index.cgi"; document.forms[num].a.value="1"; document.forms[num].submit(); } </script> <form> <input type="hidden" name="a" value=""> <input type="button" value="テスト1" onclick="javascript:test(0)"> </form> <form> <input type="hidden" name="a" value=""> <input type="button" value="テスト2" onclick="javascript:test(1)"> </form> <form> <input type="hidden" name="a" value=""> <input type="button" value="テスト3" onclick="javascript:test(2)"> </form>

共感・感謝の気持ちを伝えよう!

その他の回答 (4)

  • 回答No.5
  • fujillin
  • ベストアンサー率61% (1594/2576)

>どのフォームか識別できる方法はあるのでしょうか? スクリプト側で、どのフォームからのリクエストかを識別して処理内容を変えたいということでしょうか? フォームにIDを付けておいてそれで識別するか、フォーム側からの呼び出しの引数に制御用の変数を入れておくとか、あるいは呼び出す側でサブルーチンを変えて呼び出すなどの方法がわかりやすいし、簡単だと思います。 (これらの方法はすでに回答済ですね。) どうしてもIDをつけたくなく、フォームからの呼び出しも変えたりしたくない理由があるのであれば、HTML内のフォームを順に検索していって、どれかを特定すればいいのでは? スクリプトの呼び出しが test(this.form);でされていると仮定すると・・・ function test(aa){  for (i=0; i< document.all.tags("form").length; i++){   if (document.all.tags("form")(i)==aa) { alert(i); }  }    //上の識別結果を利用して、それぞれの必要な処理を行う } で、HTMLの何番目のフォームかを識別可能です。(とりあえず、アラート表示。最初の番号は0スタート)

共感・感謝の気持ちを伝えよう!

  • 回答No.4

onclick内では this がそのinputを示す。 フォーム内の部品は formプロパティで所属フォームを得る事ができる。 http://www.doraneko.org/misc/dom10/19981001/level-one-html.html#ID-6043025 よって、次のような感じでいいと思う。 <input ~ onclick="test(this.form)"> ↑ クリックされたボタンの属するフォームをtestに渡す。 function test(F){ // ↑ 'F' はただの変数名なんでなんでもいい。とにかくこれが<form>を示す。 F.action = "/index.cgi"; ・・・ }

共感・感謝の気持ちを伝えよう!

  • 回答No.3
noname#84373
noname#84373

親をさがすために function parentSearch(o,t){while(o.tagName!=t)o=o.parentNode;return o;} を追加。 this.parentNodeの部分を parentSearch(this,'FORM') に換えてみる。

共感・感謝の気持ちを伝えよう!

  • 回答No.2

http://www.w3.org/TR/DOM-Level-2-HTML/html.html#ID-63239895 の方が確実だと思う。 XHTML 1.0 Strictなんかだとform直下にはブロックレベル要素しか置けないから必然的に <form action="hoge.php" method="post"> <ul> <li><input type="text" /></li> </ul> </form> とか,parentNodeとは限らないから。

共感・感謝の気持ちを伝えよう!

関連するQ&A

  • formの中で別のactionをもったsubmitボタンの設置。

    formの中で別のactionをもったsubmitボタンの設置。 <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=EUC-JP"> <title>sample</title> <script language="JavaScript" type="text/javascript"> <!-- //<クリックした時に実行される関数> //*** 確認画面A function func1(form){ document.form1.check[].value =form.check[].value; document.form1.submit(); } //*** 確認画面B function func2(form){ document.form2.check[].value =form.check[].value; document.form2.submit(); } //--> </script> </head> <body class="index"> <form enctype="multipart/form-data"> <input type="check" name="test[]" value="0">0 <input type="check" name="test[]" value="1">1 <input type="check" name="test[]" value="2">2 <input type="button" onClick="func2(this.form)" value="確認B"> <input type="button" onClick="func1(this.form)" value="確認A"> </form> <!-- sousin.php画面へ --> <form method="post" name="form1" action="sousin.php" enctype="multipart/form-data"> <input type="hidden" name="check[]"> </form> <!--- text.php画面へ ---> <form method="post" name="form2" action="text.php" enctype="multipart/form-data"> <input type="hidden" name="check[]"> </form> </body> </html> 上記のように記述し、フォームの中に別のactionをもったsubmitボタンを設置しました。 チェックボックスで何と何がチェックされたかを渡したいのですが、エラーが発生します。 おそらくjavascript内の構文でcheck[]と記述してるからだと思いますが、 どのようにすれば受け渡すことができるのでしょうか。 checkのみにすると1つの値しか渡せません。

    • ベストアンサー
    • HTML
  • 一つのページで二つのFormを別々に使いたい

    <body> <form name="fm1"> <input type="hidden" value="1" id="page"> <input type="button" value="送信する" onClick="execute()"> </form> <form name="fm2"> <input type="hidden" value="2" id="page"> <input type="button" value="送信する" onClick="execute()"> </form> <div id="container">content</div> </body> </html> 上記のように同じ関数execute()を実行するのですが、受け渡す値がvalue="1" と value="2"と別々になっています。 素人考えではフォームfm1とfm2とは別々の値(1or2)を渡すと思ったのですが、どちらのボタンを押してもvalue="1"の結果となります。 二つのフォームを別々に動作させるにはどのようにすればよいでしょうか。

  • INPUT上でリターンを押してもsubmitされない方法

    フォームにてキーワードを入力し、検索ボタン押したときに javascriptにて以下の動作をさせたいと思っています。  ・hidden項目に特定値をセットしてsubmitをかける 以下のコードを書いたのですが、INPUT上でリターンを押すと submitされてしまいます。 ボタン以外でリターンを押した場合に何も動作させないようにするにはどのようにすればよいのでしょうか? -------------------------------------------------------------- <SCRIPT language="JavaScript"> <!-- function javasc_name(param){ document.form.PARAM.value = param document.form.submit() } //--> </SCRIPT> <form method="POST" action="cgi-bin/xxx.exe"> <input type="text" name="KEYWORD"> <input type="hidden" name="PARAM"> <input type="button" value="検索" OnClick="javasc_name(10)"> </form> --------------------------------------------------------------

    • ベストアンサー
    • HTML
  • リンク風sabmitのformをまとめられますか?

    フォームの送信を、リンク風に表示しているのですが、 複数ある場合、フォームタグをまとめることはできるのでしょうか? 下記にHTMLを記載しております。 <form name="word1" method="POST" action="word.php"> <input type="hidden" name="fruit" value="みかん"> </form> <form name="word2" method="POST" action="word.php"> <input type="hidden" name="fruit" value="りんご"> </form>    ・    ・    ・    ・ <form name="word100" method="POST" action="word.php"> <input type="hidden" name="fruit" value="ぶどう"> </form> <a href="javascript:document.word1.submit()">みかん</a> <a href="javascript:document.word2.submit()">りんご</a>    ・    ・    ・    ・ <a href="javascript:document.word100.submit()">ぶどう</a> と、1つ1つ書いていて長すぎると思っていたのですが まとめることは可能なのでしょうか? また、可能であれば、javascript等の知識が必要となるのでしょうか? ご教授宜しくお願い致します。

  • 文字の貼り付け

    以前、WindowOpen で文字を貼り付ける下記のスクリプトを教えて貰いましたが、ボタンAとBで貼り付ける文字を代える場合はどのようにすれば良いでしょうか? (親ウィンドウ側) <script type="text/javascript"> function sendMessage(_win){ _win.document.form1.test.value = "xx.htmlのフォームに表示させたい文字"; } </script> <input type="button" value="ボタンA" onclick="window.open('xx.html');"> <input type="button" value="ボタンB" onclick="window.open('xx.html');"> ※ボタンA,Bで貼り付ける文字を変えたい。 (xx.html側) <body onload="opener.sendMessage(window);"> <form method=POST action="http://~.cgi" name="form1"> <input type=text name="test" value="" readonly> <input type=submit value="送 信"> </form>

  • JavaScriptでの足し算処理について

    本日よりJavaScriptに取り組んでいますが、いきなり足し算の処理でつまずきました。 下記の様にdeta1に10を入れ、計算ボタンを押すとdeta2に25が入るような処理を行いたいのですが、10が文字として認識されてしまうらしく、deta2が1015になってしまいます。 かなり基本的なことだと思いますが、どうすればよいか教えてください。 <script language="JavaScript"> <!-- function func1(){ document.test.deta2.value=document.test.deta1.value+15; } //--> </script> <form name=test> <INPUT type="text" name="deta1"> <INPUT type=button value="計算" onClick=func1()> <INPUT type="text" name="deta2"> </form>

  • 複数フォームのデータ渡しについて

    http://okwave.jp/qa2522271.html で質問したのですが、質問内容が若干変更なりましたので、またご教授頂けたらありがたいです。 現在のコード <script language="JavaScript"> function send(v,fname){ var f=document.forms[fname]; f.botan.value=v; f.submit(); } </script> <form name="Form1" action="tesuto1.php" > <input type="hidden" name="botan"> 中略 </form> <form name="Form2" action="tesuto2.php" > <input type="hidden" name="botan"> 中略 </form> <form name="Form2" action="tesuto3.php" > <input type="hidden" name="botan"> 中略 </form> <form> <input type="button" value="送信" onClick="send(this.value,'Form1')"> <input type="button" value="取消" onClick="send(this.value,'Form2')"> <input type="button" value="確認" onClick="send(this.value,'Form1')"> </form> 前回と違うのは送信ボタンをクリックしたときに、どのボタンがクリックされたのかを判別して(ここは同じです)form1とform3のデータを渡したいのですが。 よろしくお願いします。

  • フォームのvalueを変更する方法

    下記はjavaScriptで書いたものですが、javaScriptが有効になっていないと機能しないので perlで同じことをやりたいのですが、フォームのvalueを変更する方法とinnerHTMLの様なボタンをクリックするとテキストを変更する方法が分かりません。 ヒントでも良いので教えていただけませんか? <HTML> <HEAD><SCRIPT language="JavaScript"> <!-- function nextA(){ var data = document.formA.data.value; data++; document.formA.data.value = data; } //--> function nextB(){ var data = document.formB.data.value; data++; document.formB.data.value = data; document.getElementById("print").innerHTML = data; } //--> </SCRIPT> <META http-equiv="Content-Type" content="text/html; charset=Shift_JIS"> </HEAD> <BODY> <FORM name="formA"> <input name="data" value="1"> <INPUT type="button" value="足す" onclick="nextA()"> </FORM> <FORM name="formB"> <SPAN id="print">1</SPAN> <INPUT type="button" value="足す" onclick="nextB()"> <INPUT type="hidden" name="data" value="1" > </FORM> </BODY> </HTML>

    • ベストアンサー
    • CGI
  • 確認ダイアログから複数のvalue値を送る方法

    宜しくお願いします。 データの削除をする為のボタンを作ります。そのボタンを押すと、『本当に削除しますか?』という確認ダイアログを出します。OKを押すと削除され、キャンセルをクリックすると、ダイアログが消えるだけという動作をJavaScriptで作ってみたのですが、複数のvalue値を送る方法がわからず悩んでおります。実際に作ったソースは・・・ //JavaScript部 <script language="javascript"> <!-- function warning() { if(confirm("本当に削除しますか?")) { document.test.paging.value = "1"; document.test.submit(); } else { } } //--> </script> <!--HTML部--> <form action="test.php" method="post" name="test"> <input type="hidden" name="paging"> <input type="hidden" name="drop"> <input type="button" value="送信" onClick="warning()"> この様な形で、今のままだと、 <input type="hidden" name="paging"> にはJavaScriptで設定したvalue値『1』が送信されるのですが、 <input type="hidden" name="drop"> も一緒に送りたいのです。複数のvalue値を送る方法をご教授下さい。宜しくお願い致します。

    • ベストアンサー
    • Java
  • submitではなくbuttonで送信

    事情があり、submitではなくbuttonでフォームのデータを送信したいのですが、以下のように書くとbuttonでは4567が送信されません。 <form action="test.cgi" method="post"> <INPUT type="hidden" name="aaa" value="1234"> <INPUT type="submit" name="bbb" value="4567"> </form> ↓ <form action="test.cgi" method="post"> <INPUT type="hidden" name="aaa" value="1234"> <INPUT type="button" name="bbb" value="4567" onclick="submit();" > </form> submitと同じように、bbbのデータ4567も送信するにはどのように書けばよいのでしょうか? 宜しくお願いします。