2012-03-23 2 views
0

Это довольно распространенный шаблон, в котором есть диалог, меню или какой-либо другой элемент HTML со ссылкой, внутри которой появляется ссылка в ответ на щелчок. Например, если вы нажмете оранжевый вопросительный знак над полем «Переполнение стека», он добавит кучу ссылок для «Ссылки», «Изображения» и т. Д. Затем, когда вы снова нажмете вопросительный знак, меню исчезнет.Можно ли щелкнуть левой кнопкой мыши контекстное меню браузера правой кнопки мыши?

У меня такая же настройка, только я хочу, чтобы меню уходило, когда пользователь щелкает куда угодно, кроме меню. Это не сложно ($ (document.body) .click (handleClickEsewhere)). Однако то, что трудно является следующий случай:

  1. Пользователь нажимает на вызова меню
  2. Пользователь щелкает правой кнопкой мыши на одной из ссылок в меню (создание контекстного меню браузера появится)
  3. пользователем левые щелчки в контекстном меню браузера, на «открыть в новой вкладке» пункт меню
  4. пользователь берется на ссылку в новой вкладке, НО
  5. меню остается открытым обратно на исходную страницу

Трудная часть вышеизложенного заключается в том, что я хотел бы вместо этого закрыть меню в этом случае; это выглядит немного глупо, когда пользователь возвращается к исходной вкладке, и меню все еще открыто. К сожалению, нет никакого способа обнаружить, что пользователь нажал «Открыть на новой вкладке», и, таким образом, я не могу закрыть это меню в ответ. Я могу закрыть меню в ответ на правый щелчок пользователя (шаг № 2 выше), но тогда они не смогут выбрать «Открыть на новой вкладке», потому что ссылка уйдет.

Я пробовал события jQuery click, mouseup, mousedown и contextmenu, но ни один из них, похоже, не поймал этот случай.

Неужели кто-нибудь еще придумал решение? Или, если это невозможно, может ли кто-нибудь более осведомленный, чем я, окончательно объяснить почему? Я предполагаю, что браузер просто не говорит вам о щелчке на шаге 4, но у меня нет реальной основы для этого предположения.

ответ

1

вы можете проверить, если the window lost focus, и реагировать соответствующим образом после этого (что закрыть меню)

, но это предполагает, что браузер был установлен на «переход на новую вкладку» по умолчанию. некоторые пользователи могут выбрать настройку открытия новой вкладки в фоновом режиме, поэтому основное окно не теряет фокус, и этот метод не будет работать. (но эй, кто хочет закрыть меню, если я все еще смотрю на него?)

+0

Это отличная идея, но этот подход имеет одну небольшую проблему: в моем браузере, по крайней мере, когда вы выбираете «Открыть на новой вкладке» «он не сразу переключается на эту вкладку. Таким образом, в то время как меню будет уходить, как только пользователь будет нажимать на новую вкладку, до тех пор, пока она не застрянет. Если это лучший результат, это нормально, но если есть способ избежать этого, было бы здорово. – machineghost

+0

Ближайшим из них может стать обнаружение события контекстного меню http://stackoverflow.com/a/4909687/575527, но не элемент, который был нажат. – Joseph

+0

Вот чего я боялся; спасибо за фокус предложение хотя :) – machineghost