jQuery: очередь ESC

Я работаю над огромным приложением, в котором используются подменю, модальные окна, подсказки и т. Д.

Теперь я хотел бы знать, как правильно обрабатывать Esc и щелкать внешние события в таком приложении.

$(document).keyup(function(e) {
    if (e.keyCode == 27) { ... } 
});

Я использую его для обработки нажатия клавиши Esc ... это было бы просто, если бы запускалось только одно событие ...

но учтите это: 1. щелчок открывает модальное окно 2. щелчок внутри модального окна открывает раскрывающееся меню 3. при наведении курсора мыши на пункт меню открывается всплывающая подсказка

теперь при нажатии Esc сначала должна закрываться всплывающая подсказка, при повторном нажатии меню должно закрываться и, наконец, закрывается модальное окно

как правильно с этим справиться?

То же самое и с щелчком снаружи ...

если вы щелкните за пределами модального окна, все модальное окно должно закрыть (включая меню и всплывающую подсказку), щелкнув модальное окно, но за пределами меню, должно закрыть меню и всплывающую подсказку


person DS_web_developer    schedule 06.09.2012    source источник
comment
Вы задаете очень хороший вопрос. Возможно, придется немного разобраться. Я думаю о том, чтобы сохранить все активные элементы с их закрывающим действием (удалить, скрыть и т. Д.) В массиве, а при нажатии escape вы получите последнее значение в массиве. Все еще не понимаю, как сделать его полностью динамичным.   -  person Deep Frozen    schedule 06.09.2012
comment
@ Руна, вот о чем я подумал.   -  person CaffGeek    schedule 06.09.2012
comment
Давайте поговорим об этом вопросе и возможностях этого чата   -  person Deep Frozen    schedule 06.09.2012


Ответы (1)


Для каждого открытого окна, диалогового окна и т. Д. Он добавляется в стек уровня страницы (глобальный).

Событие document.keyup при получении нажатия ESC затем выталкивает последний элемент из стека и закрывает его.

В идеале это можно усовершенствовать, чтобы инвертировать управление, так что document.keyup просто передает событие последнему элементу в стеке и обрабатывает само закрытие и удаление себя из стека.

Вы также должны отслеживать и удалять из стека элементы, которые закрыты другим способом, здесь было бы полезно инвертировать управление.

person CaffGeek    schedule 06.09.2012
comment
да, я думал так же ... к счастью, я полностью переделываю приложение и могу включить это поведение в начале для каждого объекта ... Я подумал, что есть более элегантный способ ... например, привязка события, а затем прекратить распространение и пузыри - person DS_web_developer; 06.09.2012