10秒目をつむったら…

始めまして、正暉といいます。
いつも有益な情報頂いております。

私が困っているのは親フォームから新しいサブフォームを開き、
親フォームの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のエラー報告をする画面が出てきます。


全然聞いたことも見たことも無いエラーなので困っています。
エラーの理由がおわかりの方は是非教えていただきたいですが。
よろしくお願いします。

A 回答 (3件)

セキュリティの関係から、他画面からオブジェクトの操作(追加・削除)を行なうようなスクリプトの実行は出来ません。


これが出来てしまうと、他人の作成したページを勝手に改変できてしまうことになります。
----
回避策は、親フォームに処理関数(AddOptions)を記述します。
サブフォームからは親フォームの処理関数を追加に必要な情報をパラメータで渡しCallする様にします。
----
親フォーム例:
function AddOptions( text, value )
{
//SELECTへの追加処理
}

サブフォーム例:
var parentObj = window.opener;
parentObj.AddOptions( "選択肢の名称", "選択肢の値" );
    • good
    • 0

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側で行うべきでした
    • good
    • 0

var Opt = document.createElement('OPTION');


Opt.value = "hoge";
Opt.text = "ほげ";
f.selectA.options.add(Opt);

この回答への補足

早速のご回答有り難うございます。

下記の内容は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>

エラーメッセージ:
ランタイムエラー
サーバーに例外が発生しました。

デバッグしてみましたその時のエラーメッセージ:
認識できない例外の種類の例外はハンドルできません。

よろしくお願いします。

補足日時:2003/07/09 14:42
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!