2012-03-23 8 views
0

Es ist ein ziemlich übliches Muster, wenn ein Dialog, ein Menü oder ein anderes HTML-Element mit einem darin enthaltenen Link als Antwort auf einen Klick erscheint. Wenn Sie beispielsweise auf das orangefarbene Fragezeichen oberhalb des Bearbeitungsfelds "Stapelüberlauf" klicken, wird eine Reihe von Verknüpfungen für "Verknüpfungen", "Bilder" usw. hinzugefügt. Wenn Sie dann erneut auf das Fragezeichen klicken, wird das Menü entfernt.Ist es möglich, einen Linksklick auf ein Rechtsklick-Browser-Kontextmenü zu erkennen?

Ich habe ein ähnliches Setup, nur möchte ich das Menü weggehen, wenn der Benutzer irgendwo außer dem Menü klickt. Das ist nicht schwer ($ (document.body) .click (handleClickElsewhere)). Doch was schwer ist, ist der folgende Fall:

  1. Der Benutzer klickt auf das Menü aufzurufen
  2. Der Benutzer Rechtsklick auf einen der Links im Menü (das Browser-Kontextmenü erscheinen lässt)
  3. der Benutzer links-Klicks auf dem Kontextmenü des Browsers auf „in neuem Tab öffnen“ Menüpunkt
  4. der Benutzer auf den Link in einem neuen Tab genommen, aber
  5. Das Menü bleibt geöffnet zurück auf der Originalseite

Der schwierige Teil über das oben genannte ist, dass ich in diesem Fall stattdessen das Menü schließen möchte; Es sieht irgendwie albern aus, wenn der Benutzer zu seinem ursprünglichen Tab zurückkehrt und das Menü noch geöffnet ist. Unglücklicherweise scheint es keine Möglichkeit zu geben, zu erkennen, dass der Benutzer auf "In neuem Tab öffnen" geklickt hat. Daher kann ich das Menü als Antwort nicht schließen. Ich kann das Menü als Reaktion auf den Rechtsklick des Benutzers schließen (Schritt 2 oben), aber dann wird es nicht möglich sein, "In neuem Tab öffnen" auszuwählen, da der Link weg ist.

Ich habe versucht, jQuery klicken, mouseup, mousedown und contextmenu Ereignisse, aber keiner von ihnen scheint diesen Fall zu fangen.

Hat jemand anders eine Lösung für dieses Problem gefunden? Alternativ, wenn es unmöglich ist, kann jemand mehr kenntnisreich als ich definitiv erklären warum? Meine Vermutung ist, dass der Browser Sie nicht über den Klick in Schritt 4 informiert, aber ich habe keine wirkliche Grundlage für diese Vermutung.

Antwort

1

könnten Sie, wenn the window lost focus überprüfen und entsprechend reagieren danach (was Ihr Menü zu schließen ist)

aber dies setzt voraus, dass der Browser standardmäßig auf „neuen Tab Switch“ eingestellt. Einige Benutzer wählen möglicherweise die Einstellung zum Öffnen der neuen Registerkarte im Hintergrund, so dass das Hauptfenster den Fokus nicht verliert und diese Methode nicht funktioniert. (aber hey, wer will die menü schließen, wenn ich es trotzdem sehe?)

+0

Das ist eine großartige Idee, aber dieser Ansatz hat ein kleines Problem: in meinem Browser zumindest, wenn Sie "In neuem Tab öffnen "Es wechselt nicht sofort zu dieser Registerkarte. So, während das Menü weggehen würde, wie es sollte, sobald der Benutzer auf den neuen Vorsprung klickt, bis dann es herum haftet. Wenn das das bestmögliche Ergebnis ist, ist das in Ordnung, aber wenn es einen Weg gibt, das zu vermeiden, wäre es großartig. – machineghost

+0

der nächste, den Sie erhalten können, erkennt das Kontextmenü Ereignis http://StackOverflow.com/a/4909687/575527, aber nicht das Element, das angeklickt wurde. – Joseph

+0

Das war, was ich fürchtete; danke für den Fokusvorschlag aber :) – machineghost

Verwandte Themen