2012-03-23 21 views
0

ダイアログにメニューやその他のHTML要素を挿入するのは、クリックに応じてリンクがポップアップするパターンです。たとえば、スタックオーバーフローの編集ボックスの上にあるオレンジ色の疑問符をクリックすると、「リンク」、「イメージ」などのリンクが追加されます。次に、疑問符をもう一度クリックするとメニューが表示されなくなります。右クリックブラウザのコンテキストメニューで左クリックを検出することはできますか?

私は同様の設定をしていますが、ユーザーがメニュー以外の場所をクリックするとメニューが消えてしまいます。これは難しくありません($(document.body).click(handleClickElsewhere))。しかし、どのようなハードであることは、次の場合です:

  1. ユーザーがメニュー内のリンクのいずれかでユーザーを右クリック(ブラウザのコンテキストメニューを作るが表示されます)メニュー
  2. を起動するためにクリック
  3. メニュー項目
  4. ユーザーが新しいタブでリンクを取らされていますが、
  5. メニュー「を新しいタブで開く」でブラウザのコンテキストメニューに
  6. ユーザが左クリックすると、元のページに戻って開いたまま

上記のことの難しい部分は、その場合にメニューを閉じることです。ユーザーが元のタブに戻ったときに馬鹿げているように見え、メニューはまだ開いています。残念ながら、ユーザーが「新しいタブで開く」をクリックしたことを検出する方法はないと思われます。したがって、応答としてメニューを閉じる方法はありません。ユーザーの右クリック(上記の手順2)に応じてメニューを閉じることはできますが、リンクがなくなるため「新しいタブで開く」を選択できなくなります。

私はjQueryのclick、mouseup、mousedown、およびcontextmenuイベントを試しましたが、どれもこのケースをキャッチしていないようです。

誰かがこれに対する解決策を見つけましたか?あるいは、それが不可能な場合、私よりも知識の豊富な人は、なぜその理由を明確に説明できますか?私の推測では、ブラウザはステップ4のクリックについては教えてくれませんが、その推測の根拠はありません。

答えて

1

あなたはthe window lost focusかどうかを確認し、その後適切に反応(あなたのメニューを閉じることである)

をこれは、ブラウザは、デフォルトでは、「新しいタブに切り替える」に設定されたことを前提としてことができます。一部のユーザーは、バックグラウンドで新しいタブを開く設定を選択することがあります。そのため、メインウィンドウにはフォーカスが失われず、この方法は機能しません。 (しかし、もし私がまだそれを見ているのであれば、メニューを閉じたいのですか?)

+0

これは素晴らしい考えですが、私のブラウザでは少なくとも「Open in new tabすぐにはそのタブに切り替わらない。だから、メニューが消えるのはユーザーが新しいタブをクリックした後でなければなりません。それが最高の可能性のある成果であれば大丈夫だが、それを避ける方法があればそれはすばらしいだろう。 – machineghost

+0

最も近いものは、コンテキストメニューイベントhttp://stackoverflow.com/a/4909687/575527を検出できますが、クリックされた項目は検出されません。 – Joseph

+0

それは私が恐れていたものです。フォーカスの提案にも感謝:) – machineghost

関連する問題