ダイアログにメニューやその他のHTML要素を挿入するのは、クリックに応じてリンクがポップアップするパターンです。たとえば、スタックオーバーフローの編集ボックスの上にあるオレンジ色の疑問符をクリックすると、「リンク」、「イメージ」などのリンクが追加されます。次に、疑問符をもう一度クリックするとメニューが表示されなくなります。右クリックブラウザのコンテキストメニューで左クリックを検出することはできますか?
私は同様の設定をしていますが、ユーザーがメニュー以外の場所をクリックするとメニューが消えてしまいます。これは難しくありません($(document.body).click(handleClickElsewhere))。しかし、どのようなハードであることは、次の場合です:
- ユーザーがメニュー内のリンクのいずれかでユーザーを右クリック(ブラウザのコンテキストメニューを作るが表示されます)メニュー
- を起動するためにクリック メニュー項目
- ユーザーが新しいタブでリンクを取らされていますが、
- メニュー「を新しいタブで開く」でブラウザのコンテキストメニューに
- ユーザが左クリックすると、元のページに戻って開いたまま
上記のことの難しい部分は、その場合にメニューを閉じることです。ユーザーが元のタブに戻ったときに馬鹿げているように見え、メニューはまだ開いています。残念ながら、ユーザーが「新しいタブで開く」をクリックしたことを検出する方法はないと思われます。したがって、応答としてメニューを閉じる方法はありません。ユーザーの右クリック(上記の手順2)に応じてメニューを閉じることはできますが、リンクがなくなるため「新しいタブで開く」を選択できなくなります。
私はjQueryのclick、mouseup、mousedown、およびcontextmenuイベントを試しましたが、どれもこのケースをキャッチしていないようです。
誰かがこれに対する解決策を見つけましたか?あるいは、それが不可能な場合、私よりも知識の豊富な人は、なぜその理由を明確に説明できますか?私の推測では、ブラウザはステップ4のクリックについては教えてくれませんが、その推測の根拠はありません。
これは素晴らしい考えですが、私のブラウザでは少なくとも「Open in new tabすぐにはそのタブに切り替わらない。だから、メニューが消えるのはユーザーが新しいタブをクリックした後でなければなりません。それが最高の可能性のある成果であれば大丈夫だが、それを避ける方法があればそれはすばらしいだろう。 – machineghost
最も近いものは、コンテキストメニューイベントhttp://stackoverflow.com/a/4909687/575527を検出できますが、クリックされた項目は検出されません。 – Joseph
それは私が恐れていたものです。フォーカスの提案にも感謝:) – machineghost