- ベストアンサー
名無しformの操作
- 名前のない複数のformがある場合、ボタンイベントで共通のtest()関数内で処理を行いたいが、どのフォームか識別できる方法はあるか?
- test()関数内で、各フォームの操作を行いたいが、どのフォームかわからない
- テストボタンをクリックした際に、対応するフォームの操作を行いたいが、どのフォームか識別する方法はあるか?
- みんなの回答 (5)
- 専門家の回答
質問者が選んだベストアンサー
<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)
- 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スタート)
- steel_gray
- ベストアンサー率66% (1052/1578)
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"; ・・・ }
親をさがすために function parentSearch(o,t){while(o.tagName!=t)o=o.parentNode;return o;} を追加。 this.parentNodeの部分を parentSearch(this,'FORM') に換えてみる。
- himajin100000
- ベストアンサー率54% (1660/3060)
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とは限らないから。