0

私の仕事は、ポップアップ サブメニュー パネルにファイル アップロード フォームを実装することです。私は XmlHttpRequest を使用しているため、ファイルの読み込みが完了/失敗したというイベント ステータスを受け取るまで、そのポップアップを開いたままにしておくことが重要です。Onmouseoverイベントは、onmouseoutポップアップの表示/非表示に使用されます。「非表示」の場合、ポップアップ パネルは DOM から切り離され、XHR イベントのリスナーとして使用できなくなります。

フォームの [参照] ボタンをクリックすると、ブラウザの上にシステム ダイアログ ウィンドウが開きます。Windows の IE、Chrome、および Firefox では、システム ダイアログはページごとのイベント処理を無効にします。つまり、ページ要素の 1 つでダイアログ ウィンドウの外にマウス カーソルを移動すると、ページはmouseOver/mouseOutイベントに反応するようなことをしません。残念ながら、Mac 上の Chrome/Firefox (Safari は問題ありません) の場合、ページ要素はマウス オーバー/アウトに反応します。そして、ポップアップ メニューが閉じられます (ポップアップmouseOutのイベント ハンドラーが原因) -> XHR 応答が適切に管理されていません。

ポップアップにアップロード フォームが必要であると仮定すると、システムの [ファイルのアップロード] ダイアログ ウィンドウが開いている間、そのパネル/フォームを表示し続ける方法は何ですか? おそらくMac固有のソリューションです。

サンプルコードはここで見ることができますhttp://jsfiddle.net/xqvXG/

4

1 に答える 1

0

ポップアップ パネルをフリーズし、ページ全体を透明な div (「ガラス」) で覆うことで、これを解決しました。

ユーザーがファイルを選択してアップロードが開始された場合、ガラスを取り外し、XHR 関数を使用してポップアップのフリーズを解除しますreadyStateChangeHandler(または、loadイベント ハンドラーで実行する場合もあります)。

ユーザーがシステム ダイアログ ウィンドウで [キャンセル] をクリックするか、[X] ボタンでウィンドウを閉じると、ページにイベントが渡されず、「ガラス」が画面に残ります。次に、「グラス」をクリックすると、ポップアップメニューが削除され、フリーズが解除されます(または単純に非表示になります)。

「ガラス」は、キャンセル/閉じるが押された場合にポップアップを解凍するための単一のワンクリック ポイント (パネル) を作成するために必要です。これが完璧な解決策であるとは言えませんが (追加のアクションが必要になる場合もあります)、探していたものに非常に近いものです。

于 2012-09-18T23:20:46.653 に答える