やりたいこと:
親ウィンドウからwindow.openで子ウィンドウを開き、
子ウィンドウのリスト値を親ウィンドウへ追加する
Firefoxだと、ちゃんとできるのですが、IE7だと
『window.opener.document.resultData.sel.options[i] = newOption;』
の部分でサポートされてないプロパティまたはメソッドとエラーが出ます。
同じウィンドウでテストしてみるとちゃんと動くので、
window.openerがまずいのか
[子ウィンドウ]
function sendDate() {
list=new Array;
list[0]="apple";
list[1]="orange";
for(i=0; i<Cnt; i++){
var newOption = new Option();
newOption.text = list[i];
newOption.value = i;
window.opener.document.resultData.sel.options[i] = newOption;
}
※window.opener.document.resultData.sel.options[i]=new Option(list[i],list[i]);
でも同じ結果でした。
[親ウィンドウ]
<form id=resultData name=resultData>
<select name=sel id=sel>
<option value="">--選択--</option>
</select>
</form>
どなたか原因わかりましたら、ご伝授願います。
※PHP、smarty使用してます。
No.2ベストアンサー
- 回答日時:
ソースコピーしてやってみましたが駄目なようですね。
動かすだけなら
var newOption = new Option();
を
var newOption = pener.document.createElement('option');
に変更すればIEでも普通に動きます。
理由まではわかりません。
推測では
opener.document.resultData.sel.options[i] = new Option()
だと、コンストラクタは子ウィンドウ、HTMLは親ウィンドウになります。
IEの場合はcreateElement()なども別ウィンドウに作る時は、ウィンドウを指定してwindow名.document.createElement()にしないと使えない事からも、他のウィンドウで作ったHTMLオブジェクトはそのまま入れ込めないのかもしれませんね。文字列などのオブジェクトなら問題ないと思いますが。
コアのArrayとかだといけるんですが。。
No.4
- 回答日時:
あ、oが抜けてる ^^;
#2です。
var newOption = opener.document.createElement('option');
です。
因みにこれでいけるのはOptionだからcreateElementで作った物を、別ウィンドウに = で入れ込めてしまえてると思います。間に合わせの方法だとブラウザのバージョンアップ等で使えなくなくなったりしますので、今後の事や他のエレメント操作のケースを考えると、#3さんの書いてくれてる、create→appendの方法を正しい方法として全体を変えておいた方が良いと思います。
appendを一度はじかれて使うのに抵抗がありましたが、
おっしゃる通り間に合わせの方法だと後々恐ろしいことに
なりかねないですね。
IEでしか使わないシステムですが、最低限Firefoxでも使えるように
しっかりした物を作ろうと思います。
詳しい説明ありがとうございました。
No.3
- 回答日時:
#2さんの回答をみて理解、そーいやそうだ。
なので再度。parent.htm
<html>
<body>
<form>
<select name="sel" id="sel">
<option value="">--選択--</option>
</select>
</form>
<input type="button" value="子を開く" onClick="window.open('child.htm','','width=300,height=200')">
<div id="hoge"></div>
</body>
</html>
child.htm
<html>
<head>
<script>
function sendData(){
var list=new Array;
list[0]="apple";
list[1]="orange";
var sel=opener.document.getElementById("sel");
for(var i=0; i<list.length; i++){
var newOption=opener.document.createElement("option");
newOption.setAttribute("value",i);
newOption.appendChild(opener.document.createTextNode(list[i]));
sel.appendChild(newOption);
}
}
</script>
<head>
<body>
<form>
<input type="button" value="親のセレクトに追加" onClick="sendData()">
</form>
</body>
</html>
この回答への補足
setAttributeがこんなところで使えるのですね。
javascriptを最初から自分で書くのが初めてで難しいですが、
面白くてはまり気味です。
サンプルの記述ありがとうございました。
これを使っていろいろ触ってみます。
いつもありがとうございます。
No.1
- 回答日時:
通常selectにoptionを追加するときはoptionをcreateElementしておいて
selectにappendChildするとよいようですが、IEはopenerの
selectにappendすることができないようです。
なので力技で以下のようにしてみてはどうでしょう?
ただもうしわけないですが、IE7は検証環境を用意していないので
IE6でのみ検証しています。
parent.htm
<html>
<body>
<form>
<select name="sel" id="sel">
<option value="">--選択--</option>
</select>
</form>
<input type="button" value="子を開く" onClick="window.open('child.htm','','width=300,height=200')">
<div id="hoge"></div>
</body>
</html>
child.htm
<html>
<head>
<script>
function sendData(){
var list=new Array;
list[0]="apple";
list[1]="orange";
var sel=window.opener.document.getElementById("sel")
for(var i=0; i<list.length; i++){
sel.length++;
var newOption=sel.options[sel.length -1];
newOption.value=i;
newOption.text=list[i];
}
}
</script>
<head>
<body>
<form>
<input type="button" value="親のセレクトに追加" onClick="sendData()">
</form>
</body>
</html>
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- JavaScript 以前の質問だと、どの条件でも配列が表示されてしまいます。 1 2022/07/09 11:40
- JavaScript セレクトボックスで配列を呼び出したい。 1 2022/07/08 20:14
- JavaScript 2段階プルダウンで1段階目の選択を終えた後に選択ボックスを見えなくしたい 2 2022/07/05 21:58
- JavaScript sessionStorageを調べています。 1 2023/06/20 12:41
- JavaScript セレクトを全て選択されていないと、文字によるエラーメッセージを表示させるコードを調べています 2 2023/06/22 15:48
- JavaScript console.logがどうしても2つ機能しないのでアドバイスをくださいお願いします 2 2022/07/07 22:13
- JavaScript switch文のswitch(n)の部分を複数の値にするか、if文に変えてほしいです。 1 2022/07/27 17:18
- JavaScript セレクトボックスを2つ選択してメッセージなどを表示するには。~運賃検索プログラムを完成させたい~ 1 2022/07/22 11:10
- JavaScript セレクトボックスを2つ設けて選択して初めてメッセを表示 1 2022/07/27 12:15
- JavaScript 電車の運賃を出すプログラムを作っています。 2 2022/06/22 09:36
関連するカテゴリからQ&Aを探す
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
html selectの内容を初期値に戻す
-
jQuery セレクトボックスで選択...
-
プルダウン 項目が多いので先頭...
-
onchange等のイベントハンドラ...
-
<textarea>にプルダウンを表示...
-
Selectボックスの幅を自動で広...
-
Selectの中身をfor文で入れる
-
return trueとreturn falseの用...
-
JavaScriptで<select>の<option...
-
複数のselect値で1つも選択され...
-
全てのselect要素をデフォルト...
-
idの振り直しについて
-
selectボックスで選択数を制限...
-
フォームのチェックボックスの...
-
ラジオボタンで選択変更
-
チェックボックスのON/OFFでVal...
-
onchangeイベントを強制的に発...
-
javaScriptの変数をJavaの変数...
-
onClick="this.form.submit
-
【jsp/Java】チェックボックス...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
プルダウン 項目が多いので先頭...
-
Selectの中身をfor文で入れる
-
Selectボックスの幅を自動で広...
-
CSVファイルを読みこみ、プルダ...
-
セレクトを全て選択されていな...
-
jQuery セレクトボックスで選択...
-
UWSCのIE操作でプルダウンを選...
-
html selectの内容を初期値に戻す
-
現在時刻を取得してフォームのs...
-
javascriptでの2つのプルダウン...
-
テーブルにおける行(セルにプル...
-
selectタグに直接onChangeを書...
-
【javascript・PHP】プルダウン...
-
セレクトメニューで選択された...
-
ブラウザの戻るボタンを押した...
-
JQuery selectが反映されない
-
<textarea>にプルダウンを表示...
-
プルダウンで現在の年月日を取...
-
リストボックスの項目の順番を...
-
親ウィンドウのリスト値変更
おすすめ情報