3

我正在开发一个巨大的应用程序,它使用一些子菜单、模式窗口、提示等。

现在,我想知道Esc在这样的应用程序中处理和单击外部事件的正确方法。

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

我用它来处理Esc按键...如果只有一个事件要触发,这将很简单...

但请考虑一下: 1. 单击打开模式窗口 2. 在模式窗口内单击打开下拉菜单 3. 将鼠标悬停在菜单项上打开工具提示

现在,当按下时Esc,首先工具提示应该关闭,再次按下菜单应该关闭,最后,模式窗口关闭

处理这个问题的正确方法是什么?

类似的点击外部...

如果您在模态窗口外单击,则整个模态窗口应关闭(包括菜单和工具提示)单击模态窗口但在菜单外,应关闭菜单和工具提示

4

1 回答 1

2

对于每个打开的窗口、对话框等,它都被添加到页面级(全局)堆栈中。

document.keyup 事件,当收到 ESC 按下时,将最后一个项目从堆栈中弹出,并关闭它。

理想情况下,这可以改进为反转控制,因此 document.keyup 只是将事件传递给堆栈上的最后一项,然后它处理关闭自身并将自身从堆栈中移除。

您还必须跟踪并从堆栈中删除以另一种方式关闭的项目,这是反转控制的好处。

于 2012-09-06T18:16:57.377 回答