Javascriptで開いたウィンドウを閉じたい


Javascriptで、メニューを押すとウィンドウが開いたり、閉じたりするものを書きました。

http://1st.geocities.yahoo.co.jp/gl/barreko00/view/20110611

これを、灰色のフォームウィンドウが開いた状態のときに、灰色以外の部分をクリックしたときに
ウィンドウを非表示に切り替えるにはどうしたらよいでしょうか
(ただし、灰色のウィンドウの中をクリックしたときには、ウィンドウは閉じない)

よろしくお願いします。

回答の条件
  • 1人5回まで
  • 登録:
  • 終了:2011/06/18 20:50:07
※ 有料アンケート・ポイント付き質問機能は2023年2月28日に終了しました。

回答1件)

id:jack_sonic No.1

回答回数124ベストアンサー獲得回数25

ポイント100pt

どうぞ。

このフォームの場合、フォーカスと消去フラグ、

setTimeoutとclearTimeoutによる時間差イベントの発生とキャンセル

をすべて連動させると実現できます。

動作確認ブラウザ:IE8, Firefox3.5, Chrome

【動作サンプルおよびソースコード】

http://hp.vector.co.jp/authors/VA034687/sample/js_dhtml.html

※はてなのスーパーpre記法では、JavaScriptを正しく表示できないため、

リンク先のソースを参照してください。

id:muggy0812

期待通りの動作を確認しました。

意外と、しなくてはならない処理が多いんですね。

ありがとうございます。

--

今、中身をよくよく確認しているんですが、

ウィンドウを開いたときに、テキストボックスに

フォーカスをあわせてくれているんですね。

細かい所までありがとうございます。

--

あぁ、このフォーカスにはちゃんと意味があるんですね・・・

おもしろいな~

2011/06/12 01:21:00
  • id:jack_sonic
    >あぁ、このフォーカスにはちゃんと意味があるんですね・・・
    >おもしろいな~

    そうですね。少し解説しますと

    まず前提として、
    出たり消えたりするdivフォームボックスについて、まわりを取り囲むdivなどが
    ないため、周りのものに頼って制御をおこなうことはできない・・・前提条件①

    そうなると、ユーザの操作ごとに、
    「ボックスを消すべきか消さざるべきか」を一体どうやって判断すればいいのか
    という問題に当たることでしょう。
    その情報を得るためには、どこからフォーカスが来たりクリックされて、
    フォーカスが外れた後のその次にどこをクリックしたのかも見てし、
    その上で消すか消さないかを決められる機構が必要になります。
    それが、setTimeoutタイマーを使った時間差処理です。
    まず「消す」という仮定で処理を予定しておいて、
    その直後のイベントを検出する猶予をコンマ何秒か与え、
    その情報をもとに、そのまま実行するか、キャンセルを行うかを決めます。

    次に問題となるのが、IEと違いFireFoxやChromeでは、div要素についての
    フォーカスの概念がなく、
    フォーカスが外れた時のonblurイベントに頼ることができないという
    ブラウザ起因の問題点です。

    これは、input要素ならば3つのブラウザすべてでonblurをキャッチできる
    という点を利用して解決しています。



この質問への反応(ブックマークコメント)

トラックバック

「あの人に答えてほしい」「この質問はあの人が答えられそう」というときに、回答リクエストを送ってみてましょう。

これ以上回答リクエストを送信することはできません。制限について

回答リクエストを送信したユーザーはいません