• ベストアンサー

フォームの指定

いつもお世話になっております。 早速ですが、呼び出した関数にフォーム名を渡す方法が 判らなく困ってしまってます。 説明より、ソースを見ていただいたほうが 早いと思いますので以下に記述いたします。 function Confirm(msg,formname,submitname) { if (confilm(msg)) { document.formname.submitname.clic(); } } <a href="#" onClick="Confirm('OK','form1','sub1');">テキスト1</a> <a href="#" onClick="Confirm('キャンセル','form2','sub2');">テキスト2</a> <form action='index.html' name='form1'> <input type='submit' name='sub1' value='ok'> </form> <form action='index.html' name='form2'> <input type='submit' name='sub2'> </form> //--------ここまで---------- 上記のスクリプトで、フォーム名やボタン名を Click();関数へ渡したいのですが、 どのように名前を渡すのか判りません。 変数ではなくオブジェクト名だから this.formnameなど試してみたのですが、 頓珍漢なのか、さっぱりでした。 エラーメッセージは "document.formname.submitnameはNullまたはオブジェクトではありません"というメッセージです。 初心者な質問で大変申し訳ありませんが よろしくお願い致します。

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

  • ベストアンサー
noname#1785
noname#1785
回答No.1

すいません、上記の質問内容では何をやられたいのかよくわからないのですが、下記の流れでいいですか? 1.リンクをクリックする。 2.アラートを表示 3.formname、submitnameに設定されているフォームをサブミット これでよければ、問題点は 1.function名のConfirmは、関数であり予約語です。  これをfunction名にすることはできません。  名前を変えましょう。 2.フォームにボタンを設置する必要はあるのでしょうか?  見たところ、submitボタンをクリックする、という動作を発生させたいようですね。  それなら直接submitしてしまえばいいのでは? 3.confirmの綴りが間違っています。 4.clickの綴りが間違っています。 問題点を直したソースはこちら。 function chkConfirm(msg,formname,submitname) { if (confirm(msg)) { document.forms[formname].elements[submitname].click(); } } フォームの要素はそれぞれ自動的に連想配列になるので、 forms[フォーム名] という手が使えます。 引数から渡ってきた値で連想配列からそれぞれのform、elementsがとれます。 最後の document.forms[formname].elements[submitname].click(); は、 document.forms[formname].submit(); でも動作は同じです。 # というより、こちらの方が自然ではないかと・・・。 > 変数ではなくオブジェクト名だから > this.formnameなど試してみたのですが、 > 頓珍漢なのか、さっぱりでした。 これはリンクの所にかいたということでしょうか? フォーム要素内のものであれば this.form.name といった形で名前を取ったりフォーム要素の情報を渡したりできますが、リンクはフォーム要素ではないのでthisは使えません。 まずは関数の命名規約や、記述ミスをなくすところから気を付けましょうね。(^^;; がんばってください。

fichi
質問者

お礼

回答ありがとうございます。 行いたいこと全てを説明したいただきました。 submit();はIE以外では使えないと思っていたので あえて避けていましたが、皆さん普通に利用されているのですね。 早速行ってみたところうまく行きました。 ありがとうございます。 記述ミスはソースのほうはOKだったのですが、質問時に間違えているようでは、せっかく回答をくれる方にも迷惑をかけてしまいますね。これから気をつけます。 本当にありがとうございました。

その他の回答 (1)

noname#6248
noname#6248
回答No.2

Submitボタンの動作をアンカーで実行したいのならば以下の方法がありますが… function Confirm(number){ if (number==1){ window.document.form1.submit(); }else{ window.document.form2.submit(); } } <a href="#" onClick="Confirm(1);">テキスト1</a> <a href="#" onClick="Confirm(2);">テキスト2</a> <form action='index.html' name='form1'> <input type='submit' name='sub1' value='ok'> </form> <form action='index.html' name='form2'> <input type='submit' name='sub2'> </form> だめでしょうか?

参考URL:
http://tohoho.wakusei.ne.jp/js/form.htm#submit
fichi
質問者

お礼

ありがとうございます。 submit();を利用したところ うまく行きました。参考URLもブックマークしました。 役立つURLをありがとうございます。

関連するQ&A

専門家に質問してみよう