• 締切済み

サブフォームから親フォーム制御に関して質問です。

始めまして、正暉といいます。 いつも有益な情報頂いております。 私が困っているのは親フォームから新しいサブフォームを開き、 親フォームのSelectのOptionメンバーをサブフォームから追加したいですが。 テキストボックスのValue等は上手く変えられるし、 Selectの既にあるOptionを変更するのは問題なく動きました。 下記の場合はOptionオブジェクトを新しくSelectに追加する際にエラーが発生しています。 下記の内容はサブフォームの追加ボタンを押した時のサブフォームにあるJavaScriptの一部です。 <Script Language="JavaScript"> /* サブフォームから親フォームのSelectにOption追加 */ function AddOptions(){ var f = window.opener.document.forms[0]; /* 親フォームの宣言 */ var Kname = "TEST"; /* 追加項目の宣言 */ var reg = "True"; /* 追加許可 */ if (reg != ""){ /* 親フォームのSelectのOption数 */ var cnt = f.selectA.options.length; /* 親フォームのSelectにOption追加 */ f.selectA.options[cnt] = new Option(Kname,Kname); /* ←ここでエラーが発生しています。*/ /* 親フォームのSelectの表示数 */ f.selectA.length = cnt+1; } } </Script> エラーメッセージ: ランタイムエラー サーバーに例外が発生しました。 デバッグしてみましたその時のエラーメッセージ: 認識できない例外の種類の例外はハンドルできません。 えらメッセージを何度も振り返すとMicrosoftのエラー報告をする画面が出てきます。 全然聞いたことも見たことも無いエラーなので困っています。 エラーの理由がおわかりの方は是非教えていただきたいですが。 よろしくお願いします。

みんなの回答

回答No.3

セキュリティの関係から、他画面からオブジェクトの操作(追加・削除)を行なうようなスクリプトの実行は出来ません。 これが出来てしまうと、他人の作成したページを勝手に改変できてしまうことになります。 ---- 回避策は、親フォームに処理関数(AddOptions)を記述します。 サブフォームからは親フォームの処理関数を追加に必要な情報をパラメータで渡しCallする様にします。 ---- 親フォーム例: function AddOptions( text, value ) { //SELECTへの追加処理 } サブフォーム例: var parentObj = window.opener; parentObj.AddOptions( "選択肢の名称", "選択肢の値" );

  • todo36
  • ベストアンサー率58% (728/1234)
回答No.2

function AddOptions(){ var Opt = window.opener.document.createElement('OPTION'); Opt.value = "hoge"; Opt.text = "ほげ"; window.opener.document.forms[0].selectA.options.add(Opt); } createElementをopener側で行うべきでした

  • todo36
  • ベストアンサー率58% (728/1234)
回答No.1

var Opt = document.createElement('OPTION'); Opt.value = "hoge"; Opt.text = "ほげ"; f.selectA.options.add(Opt);

jhooi_jun
質問者

補足

早速のご回答有り難うございます。 下記の内容はtodo36さんのご意見を適応した内容ですが結果は同じでした。 <Script Language="JavaScript"> /* サブフォームから親フォームのSelectにOption追加 */ function AddOptions(){ var f = window.opener.document.forms[0]; /* 親フォームの宣言 */ var Kname = "TEST"; /* 追加項目の宣言 */ var reg = "True"; /* 追加許可 */ if (reg != ""){ /* 親フォームのSelectのOption数 */ var cnt = f.selectA.options.length; /* -- ここからがtodo36さんの提案ですね。 -- */ var Opt = document.createElement('OPTION'); Opt.value = Kname; Opt.text = Kname; f.selectA.options.add(Opt); /* ←ここでエラーが発生しています。*/ /* 親フォームのSelectにOption追加 */ //f.selectA.options[cnt] = new Option(Kname,Kname); /* ←ここでエラーが発生しています。*/ /* 親フォームのSelectの表示数 */ f.selectA.length = cnt+1; } } </Script> エラーメッセージ: ランタイムエラー サーバーに例外が発生しました。 デバッグしてみましたその時のエラーメッセージ: 認識できない例外の種類の例外はハンドルできません。 よろしくお願いします。