javascriptを以下のように利用する方法として
より良い方法を教えてください。

現在、1つのフォームに2つのボタン(b1,b2)を利用して
・b1 を押すと新しいウィンドウ(w1)を作成(立ち上げる)
・b2 を押すとウィンドウ(w1)をクローズする
というものを作成しています。

b1実行時の処理として
w1 = window.open("about:blank","w1");
document.forms[0].target="w1";
retun true;

b2実行時の処理として
document.forms[0].target="_top";
if(!w1.closed)w1.close();
return true;

このようにした場合、
一度、b1を実行してウィンドウ(w1)を立ち上げてから
b2を実行すれば何も問題なくウィンドウ(w1)は閉じます。
しかし、b1を実行していない場合や、
ユーザが自分でウィンドウ(w1)を閉じた場合、b2実行時に
IEで「ランタイムエラー w1が宣言されていません」
とエラーが出ます。
(エラーが出るだけで処理自体は問題ないようです)

どのように記述すればエラーになりませんか?

このQ&Aに関連する最新のQ&A

about:blank」に関するQ&A: about:blankと表示される

A 回答 (2件)

> が、b1を実行せずにb2を実行した場合にエラーとなります。



失礼しました。null はオブジェクトでした。というわけで、

if (w1 != null && !w1.closed)w1.close();}

としてください。
    • good
    • 0
この回答へのお礼

たびたびありがとうございます。
できました!

今後ともよろしくお願いいたします。

お礼日時:2002/01/08 16:21

何処か最初の方で



var w1 = null;

と変数宣言と初期化をしておく。ウィンドウをクローズするときの判断条件を

if (typeof(w1) != "null" && !w1.closed) {
 w1.close();
}

と、初期化しただけの状態かどうかのチェックを付け加えておく。

# 動作確認までしてません m(_ _)m

この回答への補足

<html><head><script Language="JavaScript">
<!--
var w1=null;
function send(re){
if(re>=1){
w1 = window.open("about:blank","w1");
document.forms[0].target="w1";
}else{
document.forms[0].target="_top";
if (typeof(w1) != "null" && !w1.closed)w1.close();}
return true;}
// --></script>
<body><form>
<input type="submit" value="b1" onclick="send(1)">
<input type="submit" value="b2" onclick="send(0)">
</form></body></html>

下記のように変更してみました。
が、b1を実行せずにb2を実行した場合にエラーとなります。
*メーラによっては変に表示される場合がありますことお詫びします。

補足日時:2002/01/08 14:41
    • good
    • 0

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


人気Q&Aランキング

おすすめ情報