CGI-BBS > JAVA/JavaScript > JavaScript > 親ウィンドウから複数のサブウィンドウ閉じることができない。


カレッヂ
カレッヂ


質問者 miki  投稿日 9/10(水) 10:00:25
親ウィンドウを閉じる時に1つのサブウィンドウなら閉じることができましたが、
複数になると、うまくいきません。
function checkclose(name){
 if (!name.closed){name.close();
 }
}
function wclose(){
  checkclose(subA)
  checkclose(subB)
  checkclose(subC)
}
として、3つのサブウィンドウが開いていれば、閉じるようにしました。
これだと、
subA,subB,subCが開いていれば、すべて閉じる
subA,subBが開いていれば、2つは閉じる
subA,が開いていれば、subAは閉じる
それ以外は、subAだけが閉じる状態です。
wcloseが、上から順次成功しないと、進まないようです。
きっと、単純なことでしょうが。どうか教えてください。
よろしくお願いいたします。

プロバイダ参照:
サーバのOS:(未選択)
パソコンのOS:WinNT系
エディタ:
FTPソフト:
サーバ移転:していない
改造:(未選択)
CGI習熟度:(未選択)

回答者 cen_picture21  [削除]  投稿日 9/17(水) 12:24:49
上から順次成功しなくても実行するように
forやwhileで下側のスクリプトを改良してみてください。
質問者 miki  [削除]  投稿日 9/22(月) 10:52:53
回答ありがとうございました。
下記のように、かえてみると、うまくいきました。
ただ、初心者なもので、最初の方法では、なぜ、成功しないと次のステップを実行しないのかわかりません。
解説していただければ、幸いです。
どうぞ、よろしくお願いいたします。

winlist = new Array()

function wopen(url,name)  
{ 
 winlist[name]=window.open(url,name ,"width=600,height=600,status=no,scrollbars=yes,directories=no,menubar=no,resizable=yes,toolbar=no,left=100,top=300") ;
 winlist[name].focus() ;
	
}

function wclose()
{		
 for (field in winlist) { ;
  if (winlist[field].closed)
  {
	continue ;
  }
	winlist[field].close() ;
 }
}
回答者 cen_picture21  [削除]  投稿日 9/24(水) 19:16:46
うまく説明できるかわかりませんが、がんばってみます。

最初の関数のfunction checkclose(name)のif文のelseの場合に、
何もしない場合は省略されていてもいいのです。
しかし、、
呼び出し元の関数function wclose()で、次に関数を呼び出す様に記載されています。
それゆえに次の関数は実行せず、終了してしまいます。

改良されたスクリプトは逆に
if文の中で閉じている場合にcontinueでループして、function wclose()
関数のfor文を再度実行させています。この場合winlist[field].close() 
は実行されずにfor文にループしています。

私も配列変数を使用してのfor( in )を考えましたが、
elseを使用してのスクリプトです。

補足ですが.closedはブラウザによって正常に稼動しない場合があります。
又window.open()で開いたウィンドウは他にも何かと面倒な事が多いようです
のであまり多くのウィンドウは作成しない方が賢明かもしれませんね。
質問者 miki  [削除]  投稿日 9/25(木) 11:00:28
たびたびの回答ありがとうございました。
自分には、スクリプトセンスが本当にないなと感じました。
また、わからないことを質問することもあろうかと思いますが、
よろしくおねがいいたします。
重ねて、ありがとうございました。

このページは終了したので返信(回答)は書きこめません
 


Web裏技